2014-06-05 130 views
1

我试图创建多个嵌套形式,我一直在下面这个例子 http://guides.rubyonrails.org/form_helpers.html#building-complex-forms轨道4种多层嵌套形式

在这里我们有

  • 人>的has_many:地址
  • 地址> belong_to :人

但是,如果我想添加城市表,我会有

  • 人>的has_many:地址
  • 地址> belongs_to的:人,belongs_to的:城市
  • 城>的has_many:地址

问题是当我尝试在表单中的城市增加作为text_field不作为选择。我见过的所有例子都使用select来代替。

我想要做的是有一个窗体来创建一个人,允许人插入地址并显示城市作为文本字段。如果城市不存在于数据库中,那么创建它,如果不使用现有的(我想在这里我将不得不使用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 

我不知道如何来处理每儿子PARAMS,我有这样的:

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

向我们展示你的**'Person' **模型。 – Pavan

+0

我修改了原帖以显示3个模型 – vander

回答

1

那应该是city_attributes。 地址不是have_many :cities,只有一个。 :)

同样,你必须改变Address使其belongs_to :cityaccepts_nested_attributes_for :city

+0

这就是我现在的样子 – vander

+0

你上面的代码并不是那样的。它有'accep_nested_attributes_for:城市'注意复数。它应该改为'accepted_nested_attributes_for:city'你也有'cities_attributes:[:id,:city]'而且应该是:'city_attributes:[:id,:city]' –

+1

我终于明白你在说什么了,它的工作!感谢天才 – vander