私はredirected_toにurlがヘッダーparamsに '.1'とparams["format"=>'1']
を付け加えたコントローラ#アクションを持っています。私がリダイレクトなしで同じコントローラ#アクションにヒットしたとき、たとえばlink_to
からurlにはこの '.1'変数が付加されず、paramsハッシュにはformat
という変数は含まれません。何故、リダイレクト時にヘッダーparamsハッシュにフォーマットキーがありますか?
アクションが他の方法とは異なる方法でヒットしたときにこの変数が表示されるのはなぜですか?この変数の目的は何ですか?以下のコード:
routes/rb;
root 'routes#root'
RoutesController.rb:条件分岐redirects_to new_company_quote_path
はURLはこのように、「0.1' で追加され
class RoutesController < ApplicationController
before_filter :authenticate_user!
def root
if current_user.company.present?
redirect_to new_company_quote_path(current_user, current_user.company) #, status '301'
else
redirect_to new_company_path(current_user) #, status '301'
end
end
end
。 http://localhost:3000/companies/1/quotes/new.1
、パラメータは次のとおりです。
<ActionController::Parameters {"controller"=>"quotes", "action"=>"new", "company_id"=>"1", "format"=>"1"} permitted: false>
。
条件分岐がnew_company_path
にリダイレクトされると、URLに「.2」が追加されます。 http://localhost:3000/companies/new.2
、パラメータは次のようになります。
new_company_quote_path(current_user.company)
new_company_path
、余分なパラメータが渡されていることから、それらが:format
キーのためのものであると信じ、それらにto_param
を呼んだ:
<ActionController::Parameters {"controller"=>"companies", "action"=>"new", "format"=>"2"} permitted: false>
'.1'は書式の接尾辞です(' .html'や '.php'で終わるWebページを考えます)。私の推測では、何とかレールがフォーマットを受信し、リソースIDを受け取ることを期待しているところでしょう。 –