Rails: обновление родительского объекта при сохранении дочернего - PullRequest
34 голосов
/ 18 июля 2011

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

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

Спасибо.

Модель

class Conversation < ActiveRecord::Base
  has_many :messages 
end

class Message < ActiveRecord::Base
  belongs_to :conversation
end

Ответы [ 3 ]

56 голосов
/ 14 мая 2013

Вы можете также определить это для отношений.

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

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

40 голосов
/ 18 июля 2011

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

after_save do
  conversation.update_attribute(:updated_at, Time.now)
end
9 голосов
/ 09 января 2013

Я предпочитаю это решение для 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...