假设我有两个课程:Post
和Comment
class Post < ActiveRecord::Base
belongs_to :newest_comment, :class_name => "Comment", :foreign_key => "newest_comment_id", :dependent => :destroy
has_many :comments, :dependent => :destroy, :autosave => false
def set_comment(new_comment)
comments << new_comment # <= still auto saves
self.newest_comment = new_comment # why do I need the self?
save
end
end
class Comment < ActiveRecord::Base
:newest_comment属性是一个轻微的优化,让我很难过。我需要set_comment
内的操作在事务中发生。
我是否错误地阅读了文档,或者new_comment
是否应该自动保存。我也想知道为什么需要self
。
您可以在代码中看到我的两条评论。
答案 0 :(得分:2)
您应该使用#has_one,而不是使用belongs_to,这与#has_many相同,但自动限制为1,因此:
class Post < ActiveRecord::Base
has_many :comments, :order => "created_at DESC"
has_one :newest_comment, :class_name => "Comment", :order => "created_at DESC"
end
这样,你甚至不需要使用自动保存等等,因为最新的评论总是正确的。如果最新的评论不是最新的#created_at评论,只需更改order by子句。