我读了hidden_fields
的技术定义,但不确定它真正的作用是什么。我的理解是它允许您传递某些参数的属性。例如,如果您有一个丰富的联接模型,您可以使用hidden_field
为用户分配user_id到用户联接模型属性。这是正确的吗?
如果是这样,那么在表单或控制器中执行哪个更好呢?
我读了hidden_fields
的技术定义,但不确定它真正的作用是什么。我的理解是它允许您传递某些参数的属性。例如,如果您有一个丰富的联接模型,您可以使用hidden_field
为用户分配user_id到用户联接模型属性。这是正确的吗?
如果是这样,那么在表单或控制器中执行哪个更好呢?
这两种方法都是用来创建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。
这会生成一个隐藏类型的输入字段...
<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}" />
hidden_field
不安全。我正在尝试通过控制器在create
方法中保存它,但遇到了麻烦。当您通过丰富的联接模型进行关联时,它们是否应自动更新诸如user_id之类的内容?如果是这样,那么我的关联肯定有问题。谢谢。我还在这里发布了另一个问题:question,如果您想看一下。谢谢。 - noob