ruby on rails - has_one, :through => model VS simple meth



我在使用 has_one, through => model 时遇到了一些问题。最好的是向你展示我的情况。

class Category
  has_many :articles
end
class Article
  has_many :comments
  belongs_to :category
end
class Comment
  belongs_to :article
  has_one :category, :through => :articles
end

一切正常。我可以做comment.category.问题是当我创建新评论并设置其文章时,我保存了评论以使关联正常工作。例:

 >> comment = Comment.new
 >> comment.article = Article.last
 >> comment.category
     -> nil
 >> comment.article.category
     -> the category
 >> comment.save
 >> comment.category
     -> nil
 >> comment.reload
 >> comment.category
     -> the category

无论如何has_one, through => model不要设置,构建构造函数和创建方法。所以,我想用以下方式替换我的注释模型:

class Comment
  belongs_to :article
  def category
    article.category
  end
end

听起来是个好主意?

你的想法没有错。我看不到很多情况下has_one :category, :through => :articles显然是更好的选择(除非急切加载Comment.all(:include => :category))。

关于delegate的提示:

class Comment
  belongs_to :article
  delegate :category, :to => :article

不同的方法:

class Comment
  belongs_to :article
  has_one :category, :through => :article
  def category_with_delegation
    new_record? ? article.try(:category) : category_without_delegation
  end
  alias_method_chain :category, :delegation

尝试在类别类中进行更改,如下所示:

class Category
  has_many :articles
  has_many :comments, :through => :articles
end

相关内容

  • 没有找到相关文章