2009-07-07 8 views
30

Ho un processo che itera attraverso un gruppo di modelli ActiveRecord, esegue qualche elaborazione e salva nuovamente i modelli. Spesso, tuttavia, l'elaborazione non determina modifiche agli attributi e quindi la colonna updated_at non cambia mai (anche se è stato richiamato il salvataggio)."Touch" nella colonna updated_at in Rails 2.3.2

Preferirei non disabilitare gli aggiornamenti parziali (in generale, sono utili). Sto indovinando che i miei due opzioni sono:

  1. Aggiungi una colonna timestamp separato per il modello (vale a dire, 'processed_at') e gestire questo me stesso, anche se questo sembra un po 'uno spreco/ridondante.
  2. o in qualche modo annullare la gestione dell'attributo updated_at?

Ho sentito dire che Rails 3 avrà un metodo "touch" che sarebbe esattamente quello che sto cercando.

Eventuali idee/opzioni/opinioni?

risposta

52

in realtà il metodo touch è già in Rails 2.3.x, quindi si può semplicemente fare:

model.touch 

per aggiornare la colonna updated_at. In alternativa, per aggiornare qualche altra colonna con la data e l'ora correnti uso:

model.touch(:column_name) 
+0

Wow! Hai ragione. Lezione appresa, non credere a tutto ciò che leggi in un post del blog (http://ryandaigle.com/articles/2009/4/20/what-s-new-in-edge-rails-touching), vai direttamente a la fonte (http://github.com/rails/rails/blob/0d3c5f0a822cd1b6029b5f619774b7794a94f370/activerecord/lib/active_record/timestamp.rb#L27) – ideasasylum

+0

Penso che DHH potrebbe averlo menzionato su Twitter - è così che lo sapevo. –

+0

Grrr ... sembra che il supporto al tocco abbia appena perso la versione 2.3.2 e si trovi solo nel ramo 2.3 STABLE. Non c'è un traguardo 2.3.3 ma il 2.3.4 è elencato come 18 luglio. Immagino che dovrò solo aspettare :-( – ideasasylum

1

Ora che la linea 2.3.x è venuto e andato, una risposta più definitiva è quel tocco non ha fatto in ActiveRecord fino 2.3.8 . Quindi, chiunque utilizzi ancora Rails 2.3.2 (come l'OP era - e come sono attualmente) avrà bisogno di trovare un altro modo per "toccare" i loro record.

Problemi correlati