ActiveRecord协会关于:自动保存和自我

时间:2010-12-29 07:20:45

标签: ruby-on-rails activerecord

假设我有两个课程:PostComment

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

您可以在代码中看到我的两条评论。

1 个答案:

答案 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子句。