はじめに
Railsを使っていてhidden_field
とhiddn_field_tag
の違いについて学んだので備忘録として残しておきます
<%= hidden_field_tag :message, @user.message %>
<%= f.hidden_field_tag :message, :value => @user.message %>
環境
ruby 2.6.3
rails 6.0.3
本題
コントローラーで保持しているパラメータ(user_idなど)を次のアクションに渡したいときに使うのがhidden_field
とhiddn_field_tag
ですがこの2つは使い勝手が少し変わります。
1. hidden_field_tag
<%= hidden_field_tag :message, @user.message %>
上記のコードではmessageというパラメータに@user.massageの情報を渡します。
サーバーで送ったパラメータを確認すると以下のようになっています。
Parameters: {"authenticity_token"=>"jLrZNeJ+oz7RT6sKuiHe/LoEdcY6hWx9zmx3mx6xXpzhxbh0VtgiVk0c2mMfi3654mkAB1mQTVkwH0lm5KO8Kw==","message"=>"hello", "commit"=>"メッセージ"}
"message"=>"hello"
のようにパラメータが送られているのがわかります。
この受け取ったパラメータを利用したいはparams[:message]
のようにすると中身を参照できます。
2. f.hidden_field
f.hidden_field
の場合は書き方が少し特殊になります。
<%= form.hidden_field :message, value: @user.message %>
上記のようにvalue
の続きに渡したい要素を指定します。
サーバーに送られたパラメータを確認すると以下のようになっています。
Parameters: {"authenticity_token"=>"jLrZNeJ+oz7RT6sKuiHe/LoEdcY6hWx9zmx3mx6xXpzhxbh0VtgiVk0c2mMfi3654mkAB1mQTVkwH0lm5KO8Kw==","users"=>{"message"=>"hello"}, "commit"=>"メッセージ"}
"users"=>{"message"=>"hello"}
のようにパラメータが送られています。
このパラメータを利用したい場合はparams[:user][:message]
のように記述することで利用できます。
参考