一种形式的多个多态字段

时间:2012-01-01 18:40:34

标签: ruby-on-rails nested-attributes polymorphism

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]

1 个答案:

答案 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 %>