Три модели на одной странице

У меня есть три модели (трубопровод, этап, сделка) со следующими соотношениями:

  • трубопровод имеет много стадий/этап принадлежит одному трубопроводу
  • на сцене есть много сделок/сделка принадлежит одному этапу

сначала я должен создать новый конвейер (это не проблема), когда я открываю конвейер, я должен делать четыре вещи (в конвейерах show.html.erb)

  • добавить новые этапы
  • добавить новые предложения
  • этапы редактирования
  • редактировать сделки

поэтому я несколько раз собираюсь разобраться с этой ситуацией. это не проблема для добавления новых этапов в конвейер, но я понятия не имею, как создавать новые сделки на этапе. Надеюсь, вы поймете, что кто-то может дать мне подсказку, как добавить мои сделки.

2 ответа

Я бы рекомендовал использовать объекты формы. Посмотрите раздел "Извлечь объекты формы", чтобы получить эту идею: http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/

Вы также можете просмотреть этот связанный railscast, если у вас есть доступ: http://railscasts.com/episodes/416-form-objects


Вы должны посмотреть на nested_attributes. Существует хороший railscast об этом.

Основная идея, лежащая в основе nested_attributes заключается в следующем:

class Pipeline
 has_many :stages

 accepts_nested_attributes_for :stages
end

class Stage
 belongs_to :pipeline
 has_many :deals

 accepts_nested_attributes_for :deals
end

class Deal
 belongs_to :stage
end

Тогда в вашей форме:

<%= f.fields_for :stages do |b| %>
 <%= b.text_field ... %>

 <%= b.fields_for :deals do |c| %>
 <%= c.text_field ... %>
 <% end %>

<% end %>

Не забудьте также создать классы в своем контроллере:

class PipelinesController 
 def new
 @pipeline = Pipeline.new
 @stage = @pipeline.stages.build
 @deal = @stage.deals.build
 end
end

licensed under cc by-sa 3.0 with attribution.