質問: 解決したいこと ------- 下記の処理を作成したいです。 1. ボタンを押下のような動作をトリガーとして、javascriptの変数をcontrollerに渡す 2. controllerは受け取った変数で何らかの処理を行い、処理結果をviewに渡し画面表示する 1.の処理のうち「javascriptの変数をcontrollerに渡す」をどのように実現するかが分からなく、方法やコードをご教示いただけないでしょうか。 環境 -- * Ruby 2.6.3 * Rails 6.0.3 何卒よろしくお願いいたします。
回答: やり方は色々ありますが 1. hidden_field を用意しておいてボタンが押された瞬間そのフィールドに値を埋めてあとは form submit に任せるとか 2. ボタン押されたトリガー時に http リクエストを自分で作ってしまうとか ただ Rails の流儀でやるなら こちらの data-params を使うのがきれいかつ楽なんじゃないかと思います view.html.erb ``` <%= button_to 'ラベル', 'data-url': xxx_path, id: 'yyy' %> ``` 別に link_to でも form + submit でもできます application.js ``` $('#yyy').on('click', () => { $('#yyy').attr('data-params', 'aaa=' + 'javascript で作った好きな値' + '&bbb' + 'javascript で作った好きな値'); } ``` なれてるので jquery が入ってる前提でかいてますが native javascript でも同じことができるメソッドはあります jquery には data-xxx 属性をセットする ``` $('#yyy').data('params', 'ccc=' + '好きな値'); ``` ってのも用意されてるんですが昔なぜかこれだと動かなかった覚えがあるかも xxx_controller.rb ``` def xxx aaa = params.require('aaa') pp aaa ``` ちな渡すときはどんなデータも必ず文字列になるので rails 側で適宜型キャストしてください 動作確認したわけではないので細かいところは間違ってたらすみません