2011-06-30 12 views
6

Zajmuję się tworzeniem interfejsu API za pomocą Rails 3. Użytkownik może mieć kilka elementów kontaktu, takich jak telefony, e-maile, strony internetowe i adres. Każdy przedmiot ma swój własny model.Szyny 3. Pobierz najnowszą aktualizację

Potrzebuję wykonać buforowanie w mojej aplikacji na iPhone'a, która korzysta z tego interfejsu API, dlatego muszę uzyskać datę ostatniej aktualizacji dowolnego elementu i dopasować go do sygnatury czasowej pliku pamięci podręcznej.

Jak mogę uzyskać najbardziej aktualne pozycje (przy porównywaniu wszystkich tabel przedmiotów)?

Otrzymuję najnowszą pozycję dla każdej tabeli przedmiotów w ten sposób. Czy to naprawdę dobre?

@phones = @user.phones.order("updated_at desc").limit(1) 

Dziękuję za pomoc!

Odpowiedz

13

Można skorzystać z metody ActiveRecord o nazwie touch. Jest to szczególnie przydatne, jeśli masz jeden rekord nadrzędny z wieloma rekordami podrzędnymi. Za każdym razem, gdy zapisy podrzędne są zapisywane lub niszczone, rekord nadrzędny będzie miał pole updated_at ustawione na bieżący czas.

class User < ApplicationRecord 
    has_many :phones 
    has_many :addresses 
end 

class Phone < ApplicationRecord 
    belongs_to :user, touch: true 
end 

class Address < ApplicationRecord 
    belongs_to :user, touch: true 
end 

Teraz za każdym razem, adres lub telefon jest aktualizowana, Instrukcji updated_at zostanie ustawiona na chwili obecnej.

Aby sprawdzić, kiedy ostatnia aktualizacja dla bieżącego użytkownika odbyło się ponad wszystkich swoich stołach, to teraz zrobić:

@last_updated = @user.updated_at 

Na małym obciążeniu w pisze zyskasz dużo prostsze zapytań o sprawdzenie pamięci podręcznej wygaśnięcie. Dokumentację tego można znaleźć pod .

+0

To jest świetne! Nie miałem pojęcia, że ​​to istnieje. Uratowałeś mój dzień Douglas. Dziękuję bardzo! –