Использование модели соединения с вложенной формой (отношение has_many:through)

У меня есть Form_for для модели Show. Я хотел бы использовать fields_for в form_for для добавления полос. Дело в том, что я не хочу привязывать поля к бэндам при использовании формы для обновления записей. Если название группы изменится, я хотел бы обновить выступление с новой группой.

Шоу объединяются с группами через выступления

class Show < ActiveRecord::Base
  has_many :performances
  has_many :bands, through: :performances
  accepts_nested_attributes_for :bands
end

class Band < ActiveRecord::Base
  attr_accessible :name, :website, :country, :state
  has_many :performances
  has_many :shows, through: :performances

  validates :name, presence: true, uniqueness: true
end

class Performance < ActiveRecord::Base
  attr_accessible :show, :band
  belongs_to :show
  belongs_to :band
end

Вот моя форма. (упрощенный)

<%= form_for @show do |f| %>
     #fields
    <%= f.fields_for :bands do |b| %>
      <%= b.text_field :name %>      
    <% end %>
<%end>

Проблема в том, что если это используется для изменения названия группы, оно меняет название группы (безумие, верно?). Я не хочу, чтобы он обновлял запись группы — я хочу, чтобы он выполнял Band.find_or_create и обновлял запись выступления с новым идентификатором группы. Таким образом, пользователи могут заменить группу в шоу, удалив название и добавив другое название группы.

Визуализированный html должен включать идентификатор производительности, а не идентификатор группы (я думаю)

Что-то вроде:

<input id="show_performance_attributes_1_id" name="show[performance_attributes][1][id]" type="hidden" value="62">

Как это делается?


person wiredin    schedule 23.10.2013    source источник
comment
вам нужно будет написать некоторый код для этого в действии, которое обрабатывает почтовый запрос.   -  person phoet    schedule 23.10.2013
comment
Вы уверены, что мне не придется менять способ вызова fields_for?   -  person wiredin    schedule 23.10.2013


Ответы (1)


Итак, я смог найти решение своего вопроса. Возможно, я не предоставил достаточно подробностей в исходном вопросе.

Но решение состоит в том, чтобы просто использовать модель производительности в качестве вложенного поля в Fields_for вместо модели диапазонов. Измените модель шоу на accepts_nested_attributes_for performances и измените модель производительности на accepts_nested_attributes_for band.

person wiredin    schedule 03.11.2013