ActiveRecord touch (: столбец) всегда также обновляется: updated_at - PullRequest
3 голосов
/ 23 сентября 2010

У меня почти такая же проблема, как у этого парня: http://www.ruby -forum.com / topic / 197440 .

Я пытаюсь коснуться столбца (:touched_at) без автоматического обновления :updated_at, но при просмотре SQL-запросов он всегда обновляется до текущего времени.

Я подумал, что это может быть связано с конкретной моделью, которую я использовалвключен, поэтому я попробовал несколько разных с одинаковым результатом.

Кто-нибудь знает, что может быть причиной того, что он всегда устанавливает :updated_at при прикосновении к другому столбцу?touch использует write_attribute для внутреннего использования, поэтому делать это не следует.

Редактировать:

Некоторые пояснения ... Rails 2.3.5 документы дляtouch утверждают, что «если передано имя атрибута, этот атрибут используется для касания вместо атрибутов updated_at / on».Но мой не действует так.Возможно, дело в том, что документы отклонились от фактического состояния кода?

1 Ответ

8 голосов
/ 23 сентября 2010

Вы в значительной степени хотите написать собственный SQL:

def touch!
  self.class.update_all({:touched_at => Time.now.utc}, {:id => self.id})
end

Это сгенерирует этот SQL:

UPDATE posts SET touched_at = '2010-01-01 00:00:00.0000' WHERE id = 1

что вы ищете. Если вы вызовете #save, это в конечном итоге вызовет # create_with_timestamps или # update_with_timestamps , и это то, что обновляет столбцы updated_on / updated_at / creation_on / creation_at.

Кстати, источник для # touch говорит сам за себя.

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