rails routs.rb, почему маршрутизация настаивает на указании get, если это только почтовый запрос? - PullRequest
0 голосов
/ 17 марта 2012

Я создал метод API для публикации. Я указываю в route.rb, что он должен вызываться только через: post, но когда я вызываю API через браузер, он жалуется, что пропустил маршруты GET. Что не так?

class Api::XyzsController < ApiController

  # POST /api/create_xyz
  def create_xyz

    product = Product.find(params[:rpt_id])
    Xyz.create!(:product_id => product.id ,
              :status => 'open',....)

    render :json => {:message => 'Submitted.'}, :status => :ok
  end
end

routes.rb

...
namespace 'api' do
      match 'create_xyz' => 'xyzs#create_xyz', :via => [:post]
end 

пост в браузере, http://localhost/api/create_xyz?rpt_id=123 получить ошибку:

* * 1010

сгенерированный маршрут:

api_report_xyz POST     /api/report_xyz(.:format)  {:format=>"json", :action=>"report_xyz", :controller=>"api/xyzs"}

если я добавлю get к via в router.rb, это исправит это. Но я не понимаю, почему он настаивает на получении, когда это вызов метода post ...

Ответы [ 2 ]

0 голосов
/ 17 марта 2012

Параметр: via =>: post в вашем файле маршрутов просто означает, что существует только POST-маршрут, а других нет.

Это не контролирует то, что люди пытаются отправить в ваше приложение. Однако это означает, что если кто-то отправит запрос GET, ваше приложение скажет «нет маршрута», потому что у вас есть только маршрут POST.

Я понимаю, что у вас нет связанного представления и что это для API, но, тем не менее, вы проверяете, что отправляет запрос GET. Тип поступающего запроса определяется отправителем запроса, а не вашим приложением (при условии, что он поступил извне). Измените способ, которым вы тестируете или как отправитель отправляет запрос на POST, и ваша проблема исчезнет.

0 голосов
/ 17 марта 2012

Опция: via не заставляет запрос стать POST, если это GET.Он просто ограничивает входящие запросы POST-запросами.Запрос все еще должен быть составлен как POST.

...