保存嵌套模型时出现问题

时间:2011-08-31 13:09:23

标签: ruby-on-rails ruby ruby-on-rails-3 model associations

我正在使用Ruby on Rails 3.0.7并且我正在尝试保存一个“has_many :through => checkboxes”类对象(我已经阅读了Quick Tip: has_many :through => checkboxes博客文章)但是我在这方面遇到了一些麻烦。我想在 new 文章和用户“拥有”的文章类别之间创建一些关联(在下面的代码@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相关的ArticleCategories::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, ...> 对象实例),我得到以下内容:

Categories::ArticleRelationship id

似乎Ruby on Rails将nil值设置为复选框值(在上面的HTML代码中:5和6),而不是将它们设置为nil(那些应该是{{} 1}}因为在数据库中尚未创建Categories::ArticleRelationship。此外,我不知道category_idarticle_id值所需的位置(article_id值应为nil,因为@article实例尚未创建数据库)。

有什么问题?我该如何解决?

0 个答案:

没有答案