Ruby
Rails

from_with 変数の渡し方について


はじめに

Ruby on Railsで、form_withタグの中でパラメータを直接フォームから入力させないまま、値を受け渡したい時に使用するものとして、hidden_fieldhidden_field_tagがあります。自分はコントローラで保持しているuser_idを次のアクションに渡したい。ってときにけっこうこれを知るまで苦戦していたので簡単にまとめてみました。


対象ユーザ

Rails触り始めた人

フォームを実装している人


使い方

form_withの内部で使用するか、単体で使用するか、という使い方にあります。

form_withで渡すインスタンスがある場合(もしくはそれらのヘルパーを使っている場合)は、f.hidden_fieldを使う。 1個だけパラメータを単体で渡したい時は、hidden_field_tagを使う。


hidden_field_tag

hidden_field_tagの方が使用方法はシンプルに見えます。

<%= hidden_field_tag :email, @user.email %>

公式ドキュメントの例はこちら。

hidden_field_tag 'tags_list'
# => <input id="tags_list" name="tags_list" type="hidden" />

hidden_field_tag 'token', 'VUBJKB23UIVI1UU1VOBVI@'
# => <input id="token" name="token" type="hidden" value="VUBJKB23UIVI1UU1VOBVI@" />

hidden_field_tag 'collected_input', '', onchange: "alert('Input collected!')"
# => <input id="collected_input" name="collected_input" onchange="alert('Input collected!')"
# type="hidden" value="" />

hidden_field_tag どのシンボルに(第一引数)、どの値を渡すか(第二引数)、という記述。


hidden_field

以下のように、第一引数にオブジェクト名、第二引数部分にvalueとして受けわたす必要があります。

公式ドキュメントによると、

hidden_field(:signup, :pass_confirm)
# => <input type="hidden" id="signup_pass_confirm" name="signup[pass_confirm]" value="#{@signup.pass_confirm}" />

hidden_field(:post, :tag_list)
# => <input type="hidden" id="post_tag_list" name="post[tag_list]" value="#{@post.tag_list}" />

hidden_field(:user, :token)
# => <input type="hidden" id="user_token" name="user[token]" value="#{@user.token}" />

となっています。 form_withの部分で@userなどといったインスタンスを渡しているので、そのインスタンスの属性と値を指定してあげます。

まとめると、f.hidden_fieldその属性か、値は何か、という書き方


注意点

こちらの記述だと、paramsで引用する際には,params[:user][:email]に保存されます。

理由は、@userの、email属性に、valueで渡した値を格納しているからですね。モデルのインスタンスの属性に格納しているから。


公式ドキュメント

詳しい内容は公式ドキュメントを参照しましょう。

https://api.rubyonrails.org/