我有一个相对简单的问题。我有一个工作得很好的form_for
,我想通过一个不属于用户模型的随机参数,也不属于任何相关模型(例如,它不应该依赖于accepts_nested_attributes_for
)。
当我尝试添加它到表单时:
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<h2>Sign up</h2
<%= f.label :first_name %>
<%= f.text_field :first_name %>
<%= f.label :foo %>
<%= f.text_field :foo %>
<%= f.submit "Sign up" %>
<%= render "devise/shared/links" %>
<% end %>
视图加载错误:
undefined method `foo' for #<User id: nil, first_name: nil, last_name: nil, admin: nil, last_seen_at: nil, time_zone: nil, phone: nil, temp_role: nil, created_at: nil, updated_at: nil, email: "">
我明白为什么会发生错误;因为User模型上没有foo属性
但是我仍然想通过控制器传递foo
变量。最好的方法是什么(假设是一种方法)?
有一种方法可以在不编辑模型的情况下做到这一点,如果这个参数不是模型的一部分,这可能很方便。
您可以在form_for
中添加像这样的普通标签:
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<h2>Sign up</h2
<%= f.label :first_name %>
<%= f.text_field :first_name %>
<%= label_tag :foo %>
<%= text_field_tag :foo %>
<%= f.submit "Sign up" %>
<%= render "devise/shared/links" %>
<% end %>
在这种情况下,参数foo
将在user
哈希之外,因此params
将类似于
{"user"=> ["first_name"=> "Bob"], "foo"=>"bar"...}