Направляющие вложили форму с has_many: через, как отредактировать атрибуты модели соединения?

Как Вы редактируете атрибуты модели соединения при использовании accepts_nested_attributes_for?

У меня есть 3 модели: к Темам и Статьям присоединяются Компоновщики

class Topic < ActiveRecord::Base
  has_many :linkers
  has_many :articles, :through => :linkers, :foreign_key => :article_id
  accepts_nested_attributes_for :articles
end
class Article < ActiveRecord::Base
  has_many :linkers
  has_many :topics, :through => :linkers, :foreign_key => :topic_id
end
class Linker < ActiveRecord::Base
  #this is the join model, has extra attributes like "relevance"
  belongs_to :topic
  belongs_to :article
end

Таким образом, когда я создаю статью в "новом" действии контроллера тем...

@topic.articles.build

... и сделайте вложенную форму в topics/new.html.erb...

<% form_for(@topic) do |topic_form| %>
  ...fields...
  <% topic_form.fields_for :articles do |article_form| %>
    ...fields...

... Направляющие автоматически создают компоновщика, который является великим. Теперь для моего вопроса: модель My Linker также имеет атрибуты, что я хочу смочь изменить через "новую тему" форму. Но у компоновщика, которого автоматически создают направляющие, есть нулевые значения для всех его атрибутов кроме topic_id и article_id. Как я могу поместить поля для тех других атрибутов компоновщика в "новую тему" форма, таким образом, они не выходят ноль?

103
задан Arcolye 29 February 2012 в 04:13
поделиться

1 ответ

Разгадали ответ. Уловка заключалась в следующем:

@topic.linkers.build.build_article

Создает компоновщики, а затем строит статью для каждого компоновщика. Итак, в моделях:
topic.rb требует accept_nested_attributes_for: linkers
linker.rb требует accept_nested_attributes_for: article

Затем в форме:

<%= form_for(@topic) do |topic_form| %>
  ...fields...
  <%= topic_form.fields_for :linkers do |linker_form| %>
    ...linker fields...
    <%= linker_form.fields_for :article do |article_form| %>
      ...article fields...
90
ответ дан 24 November 2019 в 04:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: