- 締切済み
Raild3でparamsによってRouting
Rails3で、paramsによって動的にルーティングを変える方法はあるのでしょうか? 例えば、 <form action='/example/'> <input type='submit' name='action1'/> <input type='submit' name='action2'/> </form> こういう2つのsubmitボタンがあるフォームがあった場合、どちらのsubmitを押したかでactionを切り替えたいのです。 この場合は、params[:action1]またはparams[:action2]を見て、ルーティングの切り替えができるのかなと思っています。 何か方法はないでしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- m_matsubara
- ベストアンサー率48% (80/166)
ベストアンサーとはいきませんが ほぼ目的の動作を再現出来ましたので routes.rbに2行加えるだけでうまくいきました # routes.rb post "items/update/:update" => "items#update" post "items/update/:deatroy" => "items#destroy" resource(:items) # view(items/update) <%=form_for :dream_list, url:{ action:'update' } do |f| %> <%=f.submit "更新する", name:'update' %> <%=f.submit "削除", name:'destroy' %> <% end %>
- m_matsubara
- ベストアンサー率48% (80/166)
似たような問題があって、比較的楽な方法を見つけたので return redirect_to params を使えばパラメーターをそのまま他のアクションに横流しできます # view内部 <%=form_for :items, url:{ action:'update' } do |f| %> <%=f.submit "更新する", name:'renew' %> <%=f.submit "削除", name:'destroy' %> <% end %> # controller内部 def update # destroy処理 unless params[:destroy].blank? params[:action] = :destroy return redirect_to params end # update処理 redirect_to action:'index' end
- m_matsubara
- ベストアンサー率48% (80/166)
方法自体はGETでパラメーターを送る場合ありそうですが、現実的には面倒くさいので 割りに合わなさそうですね… createやdestroy等のメソッドが既にあって、そこに処理を回したい印象を受けますが 通常通り、actionの中で分岐処理を書いてそこでやるほうが楽そうです http://matatabi-on-rails.blogspot.jp/2010/01/submit.html 回答になっていないかもしれませんが、ちょっと調べてみます
お礼
回答ありがとうござます。 やはりaction側で対応するのが基本的な方法なんですね。 その方法で対応しようと思います。