0

我有一个 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
)

有任何想法吗?

4

1 回答 1

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 关联回调让我调用一个方法,在必要时更新消息。如果我不必再次调用保存会很好......

于 2012-07-11T17:17:48.150 回答