

## 解決したいこと

下記の処理を作成したいです。

  1. ボタンを押下のような動作をトリガーとして、javascriptの変数をcontrollerに渡す
  2. controllerは受け取った変数で何らかの処理を行い、処理結果をviewに渡し画面表示する

1.の処理のうち「javascriptの変数をcontrollerに渡す」をどのように実現するかが分からなく、方法やコードをご教示いただけないでしょうか。

## 環境

  * Ruby 2.6.3
  * Rails 6.0.3

何卒よろしくお願いいたします。


CC BY-SA 4.0
2021-08-10T14:10:27.850
80710
2023-10-12T06:04:56.677
36122
question
javascript ruby-on-rails ruby mvc
javascriptの変数をcontrollerに渡すには？


やり方は色々ありますが

  1. hidden_field を用意しておいてボタンが押された瞬間そのフィールドに値を埋めてあとは form submit に任せるとか

  2. ボタン押されたトリガー時に http リクエストを自分で作ってしまうとか

ただ Rails の流儀でやるなら  
<https://railsguides.jp/working_with_javascript_in_rails.html#data-
url%E3%81%A8data-params>  
こちらの data-params を使うのがきれいかつ楽なんじゃないかと思います

view.html.erb

[code]

    <%= button_to 'ラベル', 'data-url': xxx_path, id: 'yyy' %>
    
[/code]

別に link_to でも form + submit でもできます

application.js

[code]

    $('#yyy').on('click', () => {
      $('#yyy').attr('data-params', 
        'aaa=' + 'javascript で作った好きな値' + 
        '&bbb' + 'javascript で作った好きな値');
    }
    
[/code]

なれてるので jquery が入ってる前提でかいてますが  
native javascript でも同じことができるメソッドはあります

jquery には data-xxx 属性をセットする

[code]

      $('#yyy').data('params', 'ccc=' + '好きな値');
    
[/code]

ってのも用意されてるんですが昔なぜかこれだと動かなかった覚えがあるかも

xxx_controller.rb

[code]

    def xxx
      aaa = params.require('aaa')
      pp aaa
    
[/code]

ちな渡すときはどんなデータも必ず文字列になるので rails 側で適宜型キャストしてください

動作確認したわけではないので細かいところは間違ってたらすみません


CC BY-SA 4.0
2021-08-11T07:19:01.960
80718
2021-08-11T07:31:36.670
2021-08-11T07:31:36.670
80710
answer