web-dev-qa-db-ja.com

rails-hidden_​​fieldとhidden_​​field_tagは正確には何をしますか?

私はhidden_fieldsの専門的な定義を読みましたが、それが実際に何をしているのかわかりません。私の理解では、特定のパラメーターの属性を渡すことができます。たとえば、リッチな結合モデルがある場合は、hidden_fieldを使用して、user_idをユーザーの結合モデル属性に割り当てることができます。あれは正しいですか?

もしそうなら、フォームまたはコントローラでそれを行う方が良いでしょうか?

18
noob

これらのメソッドはどちらも、「非表示」タイプのHTML入力タグを作成するためのヘルパーです。そうです、これらはリクエストにパラメーターを追加するために使用されます(通常はフォームPOST)。実際には、パラメーターは、要求と一緒に送信したい情報の一部にすることができます。ただし、隠しフィールドは簡単に改ざんされるため、注意が必要です。

これは、非表示フィールドでユーザーIDを送信する例です

# Form
<%= form_tag foo_path do %>
  <%= hidden_field_tag "user_id", @user.id %>
  ....
  <%= submit_tag "Click Me" %>
<% end %>

# Controller
def foo
  # params[:user_id] is set with the value from the hidden field
  # Do useful stuff with the POST data
end

このようなuser_idのようなものを渡すことができますが、それが必要になることはまれです。特定の状況でuser_idが常に必要な場合は、ネストされたルートの使用を検討してください http://guides.rubyonrails.org/routing.html#nested-resources

35
Wizard of Ogz

隠しタイプの入力フィールドを生成します...

_<input type="hidden" />_

これは、表示されるフィールドがなくても、フォームで送信したい情報を保存する方法です。

ドキュメント から:

_hidden_field_tag 'tags_list'_が生成する...
_<input id="tags_list" name="tags_list" type="hidden" />_

_hidden_field_tag_は、モデルなしで使用するためのものですが、_hidden_field_は、_form_for_呼び出しおよびモデルと組み合わせて使用​​するためのものです。

hidden_field(:signup, :pass_confirm)が生成します...
_<input type="hidden" id="signup_pass_confirm" name="signup[pass_confirm]" value="#{@signup.pass_confirm}" />_

10
Chad Moran