2012-07-11 80 views
0

我有一个对话ActiveRecord的模型,它本质上是计算领域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

发现当我在写这个问题了答案:

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的关联回调让我叫更新,必要时更新消息的方法。如果我不必再次拨打保存,那将会很好...