
現在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項目にクリックされたボタンを表す値を埋め込むと言った方法で
回避する事も可能かとは思いますが、標準的なやり方とも思えず
また、良く行われる処理だと思いますので、他に方法が有る様に思えます。
どなたかご存知の方が居れば御回答お願いします。

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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
初心者プログラミング
-
CSSのhtmlへの紐付けについ...
-
英数字を含む文字列(0-9,A-Z)...
-
バーチャルボックスが使えなく...
-
<python>ノイズを時間指定して...
-
excelマクロ教えてください
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ルビー言語 csvファイル part2
-
ルビー言語 ライブラリー
-
Ruby 格納
-
パソコンのスクリーンセーバー...
-
VBScriptでExcel(2019)上のデー...
-
Ruby on railsをrails sで立ち...
-
Ruby require ライブラリー
-
ruby OpenURI::Meta
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
階層別の組織図の自動作成について
-
jquery.validationEngine.js 添...
-
jQueryのアコーディオン一番目...
-
wordpressでcookie.jsを使う
-
アコーディオンメニューをブラ...
-
jQeryのエラーについて(ページ...
-
jquery-1.3.2⇒○ 1.6.4.⇒エラー
-
jqueryの応用ができなくて困っ...
-
【JQuery】iframeのリンク先変...
-
アコーディオンメニューが他に...
-
Win11 へのRufus と レジストリ...
-
Doctrineのjoinについて
-
JavaScriptでtabindexの変更っ...
-
Javascriptを使ってQRコード読...
-
カンマ区切りのデータを配列に...
-
FullCalendar の複数月表示につ...
-
SQLのmaxで求めた値を変数に代...
-
JavascriptからPHPへのAjax通信...
-
インラインフレームを自動更新...
-
読み込み開始から読み込み終了...
おすすめ情報