2009-07-07 13 views
30

Mam proces, który iteruje przez kilka modeli ActiveRecord, wykonuje niektóre przetwarzanie i zapisuje modele ponownie. Często jednak przetwarzanie nie powoduje zmiany atrybutów, więc kolumna updated_at nigdy się nie zmienia (nawet jeśli wywoływany jest zapis)."Dotknij" updated_at kolumna w Rails 2.3.2

Wolałbym nie wyłączać częściowych aktualizacji (generalnie są one przydatne). Zgaduję, że moje dwie opcje to:

  1. Dodaj oddzielną kolumnę timestamp do modelu (tj „processed_at”) i zarządzać ten sam, choć wydaje się nieco marnotrawienia/nadmiarowe.
  2. Czy w jakiś sposób nadpisujesz zarządzanie atrybutem updated_at?

Słyszałem, że Rails 3 będzie miał metodę "dotykową", która byłaby dokładnie tym, czego szukam.

Wszelkie pomysły/opcje/opinie?

Odpowiedz

52

Właściwie metoda touch jest już w Rails 2.3.x, więc można po prostu zrobić:

model.touch 

Aby zaktualizować kolumnę updated_at. Alternatywnie, aby zaktualizować niektóre inne kolumny z bieżącej daty i czasu użytkowania:

model.touch(:column_name) 
+0

Wow! Masz rację. Lekcja, której się nauczyłeś, nie wierz we wszystko, co czytasz na blogu (http://ryandaigle.com/articles/2009/4/20/what-s-new-in-edge-rails-touching), przejdź bezpośrednio do źródło (http://github.com/rails/rails/blob/0d3c5f0a822cd1b6029b5f619774b7794a94f370/activerecord/lib/active_record/timestamp.rb#L27) – ideasasylum

+0

Myślę, że DHH wspomniał o tym na Twitterze - tak o tym wiedziałem. –

+0

Grrr ... wygląda na to, że obsługa dotykowa właśnie przegapiła wydanie 2.3.2 i jest tylko w gałęzi 2.3-STABLE. Nie ma etapu 2.3.3, ale 2.3.4 jest wymieniony jako 18 lipca. Chyba będę musiał tylko poczekać :-( – ideasasylum

1

Teraz, gdy linia 2.3.x już minęło, bardziej jednoznacznej odpowiedzi jest to, że dotyk nie uczynić go ActiveRecord aż 2.3.8 . Tak więc każdy, kto nadal używa Rails 2.3.2 (jak OP był - i jak ja obecnie) będzie musiał znaleźć inny sposób, aby "dotknąć" ich zapisów.

Powiązane problemy