- ベストアンサー
Rails3でのクリックされたボタンの判定について
- Rails3でのクリックされたボタンの判定方法が不明です。一つのフォームに複数のサブミットボタンを配置し、コントローラーでどのボタンが押されたのか判定したいですが、正しい方法がわかりません。
- 試した方法ではparamsから値を取得できず、どのボタンが押されたかを判断することができません。javascriptを使用してボタンが押されたことを判定する方法も考えられますが、もっと標準的な方法があるか知りたいです。
- この問題は一般的な処理であるため、他に方法があると思います。Rails3でのクリックされたボタンの判定について詳しい方の回答をお待ちしています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
どうやら、このバージョンのrails.jsのバグのようです。 {:disable_with => "Sending…"} のオプションをとれば、 if 'OK' == params[:commit] then OKボタンが押された際の処理 else CANCELボタンが押された際の処理 end は有効になります。(params[:commit]に正しい値が設定されるようになります) 従って、このままの状態では、対策としては、 {:disable_with => "Sending…"}をとるか、 質問者さんが、書かれた方法になります。 どうしても、{:disable_with => "Sending…"}をとりたくなく、 rails.jsをjquery用のものに変えてよいなら、荒療治になりますが、以下の方法があります。 ファイルを書き換えるので、必ずバックアップを取って行なってください。 1.jqueryをダウンロード http://docs.jquery.com/Downloading_jQuery jQuery CDN jquery-1.6.4.min.js をダウンロードし、 jquery.jsにリネームする。 2.jquery用のrails.jsを使う。 https://github.com/rails/jquery-ujs/tree/master/src からダウンロードする。 3.publicのjavascripts下に以下のファイルがあるので削除する。 prototype.js controls.js effcts.js dragdrop.js 4.ダウンロードした jquery.js と rails.js をpublicのjavascripts下に配置する。 (rails.jsは上書きする) 5.アプリケーション設定ファイルを変更する。 通常、app\vies\layoutsのapplication.html.erbの内容は java_script_include_tag:defaults になっています。この場合、上記で削除したファイルをこのままではincludeしてしまう為、 デフォルトのicludeを rails.js jquery.js application.jsにするために 以下の行を configの下のapplication.rbに追加します。 config.action_view.javascript_expansions[:defaults] = %w(jquery rails) 追加したファイルは、以下のようになります。 module Apart class Application < Rails::Application 途中省略 config.action_view.javascript_expansions[:defaults] = %w(jquery rails) end end これで、デフォルトの状態で、 rails.js jquery.js application.js が読み込まれるようになります。 そして、params[:commit]が参照可能になります。 当方、以下の環境で確認済みです。 rails 3.0.7 ruby 1.9.2p180 (2011-02-18) [i386-mingw32] windows-7 64Bit 以上。
その他の回答 (1)
- koko_u_u
- ベストアンサー率18% (216/1139)
補足
回答ありがとうございます。 検索して頂いたボタンに名前を付けると言う方法ですが 実はこれも試しました。 name属性を付けても、paramsにその名前の値が入っていないので 判定が出来ませんでした。 色々と検索したり試したりはしたのですが、ボタンの情報はparamsに 代入されない様です。 その様な情報がインターネット上に有ると言う事は 以前のバージョンでは出来たのだと思いますが Rails3では出来なくなっている様です。
お礼
御回答ありがとうございます。 原因が判らなかったのでサーバーサイドを調べていたのですが テキストフィールド等の値は送信されて来ていましたので いずれにしろフレームワークの問題だろうとは思っていたのですが JavaScriptの問題だったのですね 回答者さんに提案して頂いたjqueryへの乗り換えか rails.jsの改善かを検討したいと思います。 丁寧な御回答ありがとうございました。