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

时间:2011-10-11 22:04:40

标签: ruby-on-rails hidden-field

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

如果是这样,在表格或控制器中进行操作会更好吗?

2 个答案:

答案 0 :(得分:33)

这两种方法都是帮助者创建“隐藏”类型的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

答案 1 :(得分:10)

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

<input type="hidden" />

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

来自documentation

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}" />