通过不是模型实例属性的form_for提交参数?



我有一个相对简单的问题。我有一个工作得很好的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"...}

最新更新