Проблемы с сохранением вложенных моделей - PullRequest
2 голосов
/ 31 августа 2011

Я использую Ruby on Rails 3.0.7 и пытаюсь сохранить объект класса "has_many :through => checkboxes" (я прочитал краткий совет : has_many: through => запись в блоге), ноУ меня есть некоторые проблемы с этим.Я хотел бы создать некоторые ассоциации между новой статьей и категориями статей, "принадлежащими" пользователю (в приведенном ниже коде @current_user), используя "волшебный способ" сделать это с Ruby onМодели ассоциаций Rails.

В моих моделях у меня есть:

class Article < ActiveRecord::Base
  has_many :category_relationships,
    :class_name  => 'Categories::ArticleRelationship',
    :foreign_key => 'article_id',
    :autosave    => true,
    :dependent   => :destroy
  has_many :article_categories,
    :through     => :category_relationships,
    :source      => :article_category,
    :uniq        => true,
    :dependent   => :destroy

  attr_accessible :category_relationship_ids
end

class Categories::ArticleRelationship < ActiveRecord::Base
  belongs_to :article,
    :class_name  => 'Article',
    :foreign_key => 'article_id'

  belongs_to :article_category,
    :class_name  => 'Articles::Category',
    :foreign_key => 'category_id'
end

В моем виде файл, который у меня есть:

...

<% @current_user.article_categories.each do |article_category| %>
  <div>
    <%= check_box_tag :category_relationship_ids, article_category.id, false, :name => 'article[category_relationship_ids][]' %>
    <%= label_tag :article_category, article_category.name %>
  </div>
<% end %>

...

, который выводит следующий HTML-код:

<div>
  <input type="checkbox" value="5" name="article[category_relationship_ids][]" id="category_relationship_ids">
  <label for="category">comunication</label>
</div>
<div>
  <input type="checkbox" value="6" name="article[category_relationship_ids][]" id="category_relationship_ids">
  <label for="category">internal</label>
</div>

Когда я проверяю \ устанавливаю два вышеупомянутых флажка, (затем) я отправляю форму и проверяю файл журнала (выводя @article и @article_relationships данные соответственно относятся к Article и Categories::ArticleRelationship экземплярам объекта), я получаю следующее:

param[:article]        => {"name"=>"Sample title", "category_relationship_ids"=>["5", "6"], ...}
@article               => #<Article id: nil, title: "Sample title", ...>
@article_relationships => [#<Categories::ArticleRelationship id: 5, category_id: 6, article_id: 3, ...>, [#<Categories::ArticleRelationship id: 6, category_id: 4, article_id: 5, ...>

Кажется, что Ruby on Rails устанавливает Categories::ArticleRelationship id значения для значений флажков (в приведенном выше HTML-коде: 5 и 6) вместо того, чтобы установить их на nil (это должно быть nil, потому что Categories::ArticleRelationship еще не созданы в базе данных).Кроме того, я не знаю, где он берется из значений category_id и article_id (значения article_id должны быть nil, потому что @article экземпляры еще не созданы в базе данных).

В чем проблема?Как я могу решить это?

...