rails - hidden_​​field和hidden_​​field_tag究竟做了什么?

noo*_*oob 17 ruby-on-rails hidden-field

我仔细阅读了技术定义hidden_fields,但不确定它的真正含义.我的理解是它允许您传入某些参数的属性.例如,如果您有一个富连接模型,则可以使用hidden_field它将user_id分配给用户的连接模型属性.那是对的吗?

如果是这样,在表格或控制器中做它会更好吗?

Wiz*_*Ogz 35

这两种方法都是创建"隐藏"类型的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
Run Code Online (Sandbox Code Playgroud)

虽然你可以传递像user_id这样的东西,但我发现对它的需求很少.如果在给定情况下始终需要user_id,则可以考虑使用嵌套路由http://guides.rubyonrails.org/routing.html#nested-resources.


Cha*_*ran 11

它会生成一个隐藏类型的输入字段......

<input type="hidden" />

这是一种存储您希望随表单提交的信息而无需具有可见字段的方法.

文档:

hidden_field_tag 'tags_list' 产生...
<input id="tags_list" name="tags_list" type="hidden" />

hidden_field_tag意图是在没有模型的情况下使用,而是hidden_fieldform_for呼叫和模型结合使用.

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