0

私は本質的に次の会話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 関連付けのコールバックを使用すると、必要に応じてメッセージを更新するメソッドを呼び出すことができます。もう一度 save を呼び出す必要がなければいいのですが...

于 2012-07-11T17:17:48.150 に答える