Rails - hidden_field和hidden_field_tag具体是做什么的?

22

我读了hidden_fields的技术定义,但不确定它真正的作用是什么。我的理解是它允许您传递某些参数的属性。例如,如果您有一个丰富的联接模型,您可以使用hidden_field为用户分配user_id到用户联接模型属性。这是正确的吗?

如果是这样,那么在表单或控制器中执行哪个更好呢?

2个回答

37

这两种方法都是用来创建type属性为"hidden"的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


感谢@wizard of ogz。我认为hidden_field不安全。我正在尝试通过控制器在create方法中保存它,但遇到了麻烦。当您通过丰富的联接模型进行关联时,它们是否应自动更新诸如user_id之类的内容?如果是这样,那么我的关联肯定有问题。谢谢。我还在这里发布了另一个问题:question,如果您想看一下。谢谢。 - noob
啊,我觉得问题在另一个问题中解释得更清楚,我会在那里发布。 - Wizard of Ogz

16

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接