8

RoR 3では、コントローラ内のアクション/メソッドをアクティブにするリンク/ボタンが必要です。具体的には、ページ上の「update_specs」リンクをクリックすると、製品コントローラの「update_specs」メソッドに移動する必要があります。Rails 3コントローラ内でアクションを実行するリンクまたはボタン

link_to "Update Specs", :controller => :products, :action => :update_specs 

私は、このリンクをクリックしたときしかし、私は次のルーティングエラーを取得:

ルーティングエラーNoルートマッチ{:アクション=>私はこのサイト上でこれを行うために提案を見つけました「update_specs」、 :コントローラは=>「製品」}

私は、ルーティングをよく読んでましたが、他のすべてのメソッドは、リソースを介してアクセスしている場合、私はルートに、このメソッドを持っていなければならない理由を私は理解していない。製品。

+0

このメソッドをルーティングする必要があります。これは、 'resources'ジェネレータで生成された標準的なRESTルートからアクセスできないためです。 – MBO

答えて

14

あなたのルートを作成する必要があります。例えば

:デフォルトlink_toことでも

resources :products do 
    put :update_specs, :on => :collection 
end 

はあなたのルートでGET方法を探します。

link_to "Update Specs", {:controller => :products, :action => :update_specs}, {:method => :put } 

それとも、代わりにデフォルトでPOST方法を扱うlink_tobutton_to使用することができます:あなたはPOSTPUTメソッドを処理したい場合は、次のように、パラメータとして{:method => :post }または{:method => :put }を追加することで、それを指定する必要があります。

関連する問題