Rails форма для вложенного атрибута - PullRequest
0 голосов
/ 05 января 2012

немного борется с областями применения.У меня есть модель профиля, которая имеет номера телефонов:

has_many :phone_contact_infos, :dependent => :destroy
accepts_nested_attributes_for :phone_contact_infos, :reject_if => :all_blank

.. затем в моей модели PhoneContactInfo, у меня есть ..

belongs_to :profile
scope :business,  where('level LIKE ?', 'business')
scope :mobile,    where('level = ?', 'mobile')

Так что в основном профиль может иметь мобильный ибизнес номер.То, что я пытался (в течение дня) сделать, это сделать форму редактирования для каждого типа (бизнес и мобильный) телефонных номеров.Это то, что у меня есть, что делает неправильно ..

<%= form_for @profile do |f| %>
  <%= f.fields_for :phone_contact_infos do |contact_info| %>
    <%= contact_info.text_field :country, :size => 2 %>
    <%= contact_info.text_field :city, :size => 5 %>
    <%= contact_info.text_field :number, :size => 8 %>
  <% end %>
<% end %>

.., так как у меня есть две записи в базе данных (одна для мобильных и другая для бизнеса), приведенный выше код вставляет форму для каждого типа, поэтому я заканчиваюс текстовыми полями для деловых и мобильных номеров.Я просто хочу отредактировать один номер, скажем, мобильный.Я думаю, что мне нужно внести изменения в приведенный выше код, чтобы облегчить область действия, определенную в модели PhoneContactInfo выше.

Спасибо!

1 Ответ

0 голосов
/ 05 января 2012

Вот один из подходов.

Вы можете изменить отношение has_many в своей модели профиля, чтобы включить условия:

has_many :mobile_phone_contact_infos, :class_name => "PhoneContactInfo", :conditions => {:level => "mobile"}, :dependent => :destroy
has_many :business_phone_contact_infos, :class_name => "PhoneContactInfo", :conditions => {:level => "business"}, :dependent => :destroy

По вашему мнению, вы можете использовать:

<%= f.fields_for :mobile_phone_contact_infos do |contact_info| %>

... и он вытянет только контакт мобильного телефона, а не рабочие номера.

Два примечания:

  1. Хотя вы можете использовать необработанные условия SQL впредложение :conditions => {} (например, where('level LIKE ?', 'business')), вы теряете немного функциональности.В моем коде выше Rails будет разумно заполнять поле 'level' для вас, если вы используете profile.mobile_phone_contact_infos.build - но не будет, если вы используете необработанный код SQL.
  2. Я не проверял этои в прошлом я использовал :conditions только когда ассоциация полиморфна.Я не могу подтвердить, необходимо ли это, чтобы ваша функциональность работала.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...