Я использую 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
экземпляры еще не созданы в базе данных).
В чем проблема?Как я могу решить это?