Несколько полиморфных полей в одной форме - PullRequest
0 голосов
/ 01 января 2012
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 голосов
/ 01 января 2012

fields_for добавляет «[0]», потому что это отношение много, и ему нужно создать массив с индексом для каждого члена отношения [0], [1] ...

Так что да,второй будет иметь [1], рельсы добавляет это самостоятельно через помощников.

Чтобы включить другие атрибуты номера телефона:

<%= 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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...