2011-10-26 17 views
1

私はレールが初めてで、コントローラ内の特定のメソッドにリンクしようとしています。私のコントローラはOrganismsControllerと呼ばれ、メソッドはupload_reference_fileです。私は今のlink_toがRails link_toメソッドのパラメータがコントローラメソッドにマッピングされません。

<%= link_to "Upload Reference Sequence", :controller => :organisms, :action => :upload_reference_file %> 

として働いてきた他の同様の質問を見を通じてしかし、私は、メソッドupload_reference_fileに現在の生物に渡す必要があります。私はやってみた

<%= link_to "Upload Reference Sequence", :controller => :organisms, :action => :upload_reference_file(organism) %> 

しかし、レールは上記のコードは正しい構文ではないと文句を言う。私のルートの内部 は、私はすべてのヘルプは非常に高く評価されて

match '/organisms/upload_reference_file' => 'organisms#upload_reference_file' 

としてコントローラのアクションに合わせた方法を持っているファイル。ありがとう!

+0

「動作しません」という定義は、ほとんどの場合、常に良い考えです。ルートはメンバーの安静な行動として定義されていますか? –

+0

私は質問を少し編集して明確にしました。私は、<%= link_to "Upload Reference Sequence"、upload_reference_file_organism_path(生物)%>の行に沿って何かをしてみましたが、うまくいきませんでした。 –

+0

あなたのコントローラーで@organismを使用して宣言する必要があります –

答えて

2

Railsルーティングドキュメントの"Adding More RESTful Actions"セクションに記載されているように、RESTfulアクションを定義する必要があります。これは、パスを受け入れ、より自然な使用を可能にするヘルパーメソッドを作成します。例えば

、あなたは追加のメンバーのアクションがない場合:

resources :organisms do 
    get 'upload_reference_file', :on => :member 
end 

をあなたはその後、upload_reference_file_organism_pathがあるでしょう、にあなたのlink_toを回す:

<%= link_to "Upload Reference Sequence", upload_reference_file_organism_path(organism) %> 

(場合、これは微調整を必要とする、あなたは、 rake routesを実行して作成したパス名を取得できます。私のメモリはあまり良くありません)。

+0

URLに渡されたIDでハードコーディングを行うには、 '/ organisms(/ upload_reference_file(/:id))' => '生物#upload_reference_file' 、私はこのアプローチがずっと良いのが好きです。それはより多くのレール構築に従うようです。ありがとう! –

+0

@PhillipWhisenhuntええ、この方法は間違いなくきれいでより多くのRails-y :) –

関連する問題