Подтвердить что ты не робот

Rails: обновление родительского объекта при сохранении дочернего объекта

В моем приложении в разговоре много сообщений. Как обновить атрибут updated_at диалога, когда создается или сохраняется новое сообщение в этом Разговоре?

Я знаю :touch => true, который делает это, но также обновляет разговор, когда сообщение уничтожено, что не то, что я хочу.

Спасибо.

Модели

class Conversation < ActiveRecord::Base
  has_many :messages 
end

class Message < ActiveRecord::Base
  belongs_to :conversation
end
4b9b3361

Ответ 1

использовать обратный вызов внутри класса сообщений

after_save do
  conversation.update_attribute(:updated_at, Time.now)
end

Ответ 2

Вы можете просто определить его в отношении отношений.

class Message < ActiveRecord::Base
  belongs_to :conversation, touch: true
end

(Источник такой же, как у Уильяма G: http://apidock.com/rails/ActiveRecord/Persistence/touch)

Ответ 3

Я предпочитаю это решение для Rails 3:

class Message < ActiveRecord::Base
  belongs_to :conversation

  after_save :update_conversation

  def update_conversation
    self.conversation.touch
  end
end

Источник: http://apidock.com/rails/ActiveRecord/Persistence/touch