![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
現在Rails3でWEBアプリの開発をしているのですが
実現方法が不明な事が有るので質問させて頂きました。
実行環境は
OS:Windows7
Railsバージョン:3.0.9
APサーバー:WEBrick
です。
実現方法が不明なのは、一つのフォームに複数のサブミットボタンを配置し
コントローラーでどのボタンが押されたのか判定する方法です。
ビューにおいてフォーム内に
<%= submit_tag 'OK', {:disable_with => "Sending…"} %>
<%= submit_tag 'CANCEL', {:disable_with => "Sending…"} %>
と言う様にサブミットボタンを配置し
コントローラーでどちらのボタンが押されたのかを判定する方法なのですが
検索して調べてみると
if 'OK' == params[:commit] then
OKボタンが押された際の処理
else
CANCELボタンが押された際の処理
end
と言う風に出来ると言う情報を見つけたのですが、実際にやってみると
上記の様な値はparamsから取得出来ないので、正しく動作しません。
paramsで取得した値の中身を見ても、それらしい値も無く
何を判断すればどのボタンが押されたのかを判断出来るのかが判らず
非常に困っております。
サブミットボタンにjavascriptのコードを埋め込み
送信前にHIDDEN項目にクリックされたボタンを表す値を埋め込むと言った方法で
回避する事も可能かとは思いますが、標準的なやり方とも思えず
また、良く行われる処理だと思いますので、他に方法が有る様に思えます。
どなたかご存知の方が居れば御回答お願いします。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
No.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/ …
からダウンロードする。
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
以上。
御回答ありがとうございます。
原因が判らなかったのでサーバーサイドを調べていたのですが
テキストフィールド等の値は送信されて来ていましたので
いずれにしろフレームワークの問題だろうとは思っていたのですが
JavaScriptの問題だったのですね
回答者さんに提案して頂いたjqueryへの乗り換えか
rails.jsの改善かを検討したいと思います。
丁寧な御回答ありがとうございました。
No.1
- 回答日時:
この回答への補足
回答ありがとうございます。
検索して頂いたボタンに名前を付けると言う方法ですが
実はこれも試しました。
name属性を付けても、paramsにその名前の値が入っていないので
判定が出来ませんでした。
色々と検索したり試したりはしたのですが、ボタンの情報はparamsに
代入されない様です。
その様な情報がインターネット上に有ると言う事は
以前のバージョンでは出来たのだと思いますが
Rails3では出来なくなっている様です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- マウス・キーボード キーボード設定で困っています。長文です。 2 2022/12/10 12:44
- Excel(エクセル) マクロで謎の現象が起きていて困ってます。 エクセルで作ったボタンを押すとマクロが動いて処理をしてくれ 3 2023/06/22 17:28
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
階層別の組織図の自動作成について
-
Rails3でのクリックされたボタ...
-
IndexedDB を使ってファイルア...
-
一定時間ごとに表示内容を切り...
-
jQueryでloadしたphpをapendTo...
-
readyStateが4にならない原因
-
画面移遷なしで画像アップロー...
-
.txtファイルの読み込み
-
jQuery toggle() 戻るで開いた...
-
【javascript文法】 prototype...
-
Selenium Basicの件
-
親フレームの存在確認
-
<input>のvalue値をプルダウン...
-
backbone.js テンプレートの表...
-
毎日午前0時にhtmlを切り替えた...
-
Ajaxの結果のページングの方法
-
連番タイトル名を基準にリンク...
-
インラインフレームを自動更新...
-
ajaxからphpにpsotしたときの日...
-
Javascriptを使ってQRコード読...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
階層別の組織図の自動作成について
-
Rails3でのクリックされたボタ...
-
jQueryのアコーディオン一番目...
-
【JQuery】iframeのリンク先変...
-
jQuery.illuminateの使い方
-
jqueryについて、$("+dd",this)...
-
Selenium4でボタンをクリックで...
-
JavascriptからPHPへのAjax通信...
-
Javascriptを使ってQRコード読...
-
SQLのmaxで求めた値を変数に代...
-
JavaScriptでtabindexの変更っ...
-
インラインフレームを自動更新...
-
jQueryを使いformでsubmitした...
-
同一ページ移動時ハンバーガー...
-
ドラッグ & ドロップでのド...
-
jQueryのblockUIをformのボタン...
-
FullCalendar の複数月表示につ...
-
カンマ区切りのデータを配列に...
-
AjaxでJSONを受信すると、文字...
-
jQueryでloadした部分に.jsが効...
おすすめ情報