我在使用 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