Подтвердить что ты не робот

Как обрабатывать несколько HTTP-методов в одном действии контроллера Rails

Скажем, я хочу поддерживать методы GET и POST по одному и тому же URL. Как я могу обработать это в действии контроллера рельсов?

4b9b3361

Ответ 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]