2009-07-07 1 views
30

У меня есть процесс, который выполняет итерации через кучу моделей ActiveRecord, выполняет некоторую обработку и сохраняет модели снова. Часто, однако, обработка не приводит к изменениям атрибутов, поэтому столбец updated_at никогда не изменяется (даже если вызывается сохранение).«Touch» updated_at column в Rails 2.3.2

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

  1. Добавить отдельный столбец временной метки в модели (т.е. «processed_at») и управлять этим сам, хотя это кажется немного расточительно/избыточными.
  2. Или как-то переопределить управление атрибутом updated_at?

Я слышал, что Rails 3 будет иметь метод «касания», который будет именно тем, что я ищу.

Любые идеи/варианты/мнения?

ответ

52

На самом деле метод touch уже в Rails 2.3.x, так что вы можете просто сделать:

model.touch 

Чтобы обновить updated_at колонку. В качестве альтернативы, чтобы обновить какой-либо другой столбец с текущей даты и времени использования:

model.touch(:column_name) 
+0

Wow! Ты прав. Извлеченный урок, не верьте всему, что вы читаете в блоге (http://ryandaigle.com/articles/2009/4/20/what-s-new-in-edge-rails-touching), просто пойдите прямо в источник (http://github.com/rails/rails/blob/0d3c5f0a822cd1b6029b5f619774b7794a94f370/activerecord/lib/active_record/timestamp.rb#L27) – ideasasylum

+0

Я думаю, что DHH, возможно, упомянул об этом в Twitter - вот как я знал об этом. –

+0

Grrr ... похоже, что сенсорная поддержка просто пропустила выпуск 2.3.2 и находится только в ветке 2.3-STABLE. Там нет 2.3.3, но 2.3.4 указана как 18 июля. Думаю, мне просто нужно подождать :-( – ideasasylum

1

Теперь, когда 2.3.x линия пришел и ушел, более определенный ответ, что прикосновение не сделал его в ActiveRecord до 2.3.8 , Таким образом, любой, кто использует Rails 2.3.2 (поскольку OP был - и, как я сейчас есть), должен найти другой способ «коснуться» своих записей.