投稿用にapiメソッドを作成しました。私はroutes.rbで指定する必要があります:postだけですが、ブラウザからapiを呼び出すと、GETルートが見つからないと不平を言う。どうしましたか?ブラウザ上でrails routes.rb、なぜルーティングはポストリクエストだけであるときに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 は取得エラー:
No route matches [GET] "/api/create_xyz
ルートが生成さ:
api_report_xyz POST /api/report_xyz(.:format) {:format=>"json", :action=>"report_xyz", :controller=>"api/xyzs"}
私が手を追加した場合routes.rbのviaにそれを修正します。しかし、それがポストメソッド呼び出し時に取得することをなぜ主張するのか理解できません。
どのように実際にこの投稿リクエストを送信しようとしていますか? – James
私はここで大きな誤解が起こっていると思います。リンク(a href)またはredirect_toを使用すると、常にGETリクエストになります。それをポストにすることは何もできません。これはレールの制限ではありません。これは、ブラウザとHTTPの仕組みです。 – masukomi