Скажем, я хочу поддерживать методы GET и POST по одному и тому же URL. Как я могу обработать это в действии контроллера рельсов?
Как обрабатывать несколько HTTP-методов в одном действии контроллера Rails
Ответ 1
Вы можете проверить, было ли это сообщение с помощью request.post?
if request.post?
#handle posts
else
#handle gets
end
Чтобы ваши маршруты работали:
resources :photos do
member do
get 'preview'
post 'preview'
end
end
Ответ 2
Здесь другой путь. Я включил пример кода для ответа 405 для неподдерживаемых методов и отображения поддерживаемых методов, когда в URL используется метод OPTIONS.
В app/controllers/foo/bar_controller.rb
before_action :verify_request_type
def my_action
case request.method_symbol
when :get
...
when :post
...
when :patch
...
when :options
# Header will contain a comma-separated list of methods that are supported for the resource.
headers['Access-Control-Allow-Methods'] = allowed_methods.map { |sym| sym.to_s.upcase }.join(', ')
head :ok
end
end
private
def verify_request_type
unless allowed_methods.include?(request.method_symbol)
head :method_not_allowed # 405
end
end
def allowed_methods
%i(get post patch options)
end
В config/routes.rb
match '/foo/bar', to: 'foo/bar#my_action', via: :all
Ответ 3
Просто нужно использовать это, чтобы использовать только get и post в том же маршруте
resources :articles do
member do
match 'action_do-you_want', via: [:get, :post]
end
end
Ответ 4
вы можете попробовать это
match '/posts/multiple_action', to: 'posts#multiple_action', via: [:create, :patch, :get, :options]