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会添加[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 :(得分: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 %>