ActiveRecord基于关联计算字段

时间:2012-07-11 17:17:48

标签: activerecord

我有一个Conversation ActiveRecord模型,基本上是以下

class Conversation < ActiveRecord::Base
  has_many :messages, :order => 'created_at ASC'
  belongs_to :latest_message, :class_name => 'Message'
end

我希望将latest_message属性设置为messages.last。我已经尝试过before_save回调,但是当我添加像

这样的消息时似乎没有被触发
conversation.messages.create!(
  sender: user,
  body: message_body
)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在我写这个问题时找到了答案:

  has_many :messages, :order => 'created_at ASC',
           :after_add => :update_latest_message, :after_remove => :update_latest_message

  def update_latest_message(message)
    self.latest_message = self.messages.last
    self.save
  end

ActiveRecord关联回调让我调用一个方法,在必要时更新消息。如果我不必再次打电话保存那就太好了......