我正在尝试创建一个多个嵌套的表单,我一直在关注这个例子 http://guides.rubyonrails.org/form_helpers.html#building-complex-forms
这里我们有
但如果我想添加City表,我会有
当我尝试将字段City作为text_field而不是select时添加。我见过的所有例子都使用select。
我想要做的是创建一个表单来创建一个Person,允许Person插入Address并将City显示为文本字段。如果数据库中不存在该城市,那么创建它,如果不使用现有城市(我想这里我将不得不使用find_or_create_by?)。
人
class Person < ActiveRecord::Base
has_many :addresses
accepts_nested_attributes_for :addresses
end
地址
class Address < ActiveRecord::Base
belongs_to :person
belongs_to :city
accepts_nested_attributes_for :city
end
城市
class City < ActiveRecord::Base
has_many :addresses
end
我不知道如何处理这个人的参数,我有这个:
def person_params
params.require(:person).permit(:name, addresses_attributes: [:id, :kind, :street, cities_attributes: [:id, :city]])
end
查看
<%= form_for @person do |f| %>
Addresses:
<ul>
<%= f.fields_for :addresses do |addresses_form| %>
<li>
<%= addresses_form.label :kind %>
<%= addresses_form.text_field :kind %>
<%= addresses_form.label :street %>
<%= addresses_form.text_field :street %>
<%= addresses_form.fields_for :cities do |cities_form| %>
<%= cities_form.label :city %>
<%= cities_form.text_field :city %>
<% end %>
</li>
<% end %>
</ul>
<% end %>
当我尝试添加城市时,我收到此错误
Unpermitted parameters: cities
它不会将城市添加到数据库或地址。
我一直试图解决这个问题,但我无法找到解决方案。我知道我做错了什么?
答案 0 :(得分:1)
那应该是city_attributes
。
地址不是have_many :cities
,只有一个。 :)
同样,您必须更改Address
以便belongs_to :city
和accepts_nested_attributes_for :city