2017-07-17 5 views
0

私は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> 
+0

'.1'は書式の接尾辞です(' .html'や '.php'で終わるWebページを考えます)。私の推測では、何とかレールがフォーマットを受信し、リソースIDを受け取ることを期待しているところでしょう。 –

答えて

2

私は、問題の2つのルートがありそうであるべきと考えています。生成されたルートヘルパーのドキュメントを見つけようとしていますが、これは何が起こっているかを確認することですが、運がないので、これは検証された事実よりも "強い疑い"です。これの少なくとも一部は、here

photos_path returns /photos 
new_photo_path returns /photos/new 
edit_photo_path(:id) returns /photos/:id/edit (for instance, edit_photo_path(10) returns /photos/10/edit) 
photo_path(:id) returns /photos/:id (for instance, photo_path(10) returns /photos/10) 

を確認することができますがそうnewパスが:idをとらない(したがって、任意のパラメータを必要としない)と、そのように入れ子にnew_company_quote_path音がかかるだろう

+0

もちろん@シンプルなライム、ありがとう、あなたはまさに正しい、すべて今修正されました。 – jbk

関連する問題