2014-06-05 218 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