我有一个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
)
有什么想法吗?
答案 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关联回调让我调用一个方法,在必要时更新消息。如果我不必再次打电话保存那就太好了......