2012-01-01 32 views
0
class User < ActiveRecord::Base 
    belongs_to :person, :dependent => :destroy 
    accepts_nested_attributes_for :person, :allow_destroy => true 
    attr_accessible :person_attributes 
end 

class Person < ActiveRecord::Base 
    has_many :phone_numbers, :as => :phoneable, :dependent => :destroy 
    has_one :user 
    accepts_nested_attributes_for :phone_numbers 
end 

class PhoneNumber < ActiveRecord::Base 
    belongs_to :phoneable, :polymorphic => true 
end 

<%= form_for @user do |user_form| %> 
    <%= user_form.fields_for :person do |person_form| %> 
     <%= person_form.fields_for :phone_numbers do |phone_number_form| %> 
      <%= phone_number_form.text_field :number %> 
     <% end %> 
    <% end %> 
<% end %> 

這是有效的。它符合我的期望,但我希望我的表單中有多個電話號碼。我怎麼能做到這一點?一種形式的多個多態字段

user[person_attributes][phone_numbers_attributes][0][number] 

爲什麼fields_for add [0]?

如果我想多個電話號碼,第二個看起來像這樣嗎?

user[person_attributes][phone_numbers_attributes][1][number] 

如果是這樣,怎麼樣?

如果我可以在數據庫中獲得多個電話號碼,我的下一個問題將是如何包括其他電話號碼屬性以及每個號碼?例如:描述

user[person_attributes][phone_numbers_attributes][0][number] 
user[person_attributes][phone_numbers_attributes][0][description] 

回答

0

fields_for加 「[0]」,因爲它是一種一對多關係,它需要使陣列,對於每個成員關係的索引[0],[1] ...

所以是的,第二個會有[1],rails自己通過幫助者添加它。

包含其他電話號碼屬性:

<%= form_for @user do |user_form| %> 
    <%= user_form.fields_for :person do |person_form| %> 
     <%= person_form.fields_for :phone_numbers do |phone_number_form| %> 
      <%= phone_number_form.text_field :number %> 
      <%= phone_number_form.text_field :description %> 
     <% end %> 
    <% end %> 
<% end %>