通过 form_for 提交的参数不是模型实例的属性?
Submit a parameter via form_for that isn't an attribute on the model instance?
我有一个比较简单的问题。我有一个很好用的 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"...}
我有一个比较简单的问题。我有一个很好用的 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"...}