2011-06-30 22 views
6

Estoy desarrollando una API usando Rails 3. Un usuario puede tener varios elementos de contacto, como teléfonos, correos electrónicos, sitios web y direcciones. Cada elemento tiene su propio modelo.Rails 3. Obtenga la actualización más reciente

Necesito hacer el almacenamiento en caché en mi aplicación de iPhone que está usando esta API, por lo tanto necesito obtener la fecha de la última actualización de cada elemento y compararla con la marca de tiempo del archivo de caché.

¿Cómo puedo obtener los artículos más actualizados (al comparar todas las tablas de artículos)?

Estoy obteniendo el artículo más reciente para cada tabla de artículos como este. ¿Esto es realmente bueno?

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

Agradecido por toda ayuda!

Respuesta

13

Puede utilizar el método touch de ActiveRecord. Esto es especialmente útil si tiene un registro principal con muchos registros secundarios. Cada vez que los registros secundarios se guardan o destruyen, el registro principal tendrá su campo updated_at establecido en la hora actual.

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 

Ahora cualquier momento se actualiza una dirección o un teléfono, se establecerá el updated_at del usuario a la hora actual.

Para comprobar cuando la última actualización para el usuario actual se llevó a cabo, a lo largo de todos sus cuadros, ahora tienes que hacer:

@last_updated = @user.updated_at 

Para una pequeña sobrecarga en escribe a ganar mucho con las preguntas más simples en la comprobación de la memoria caché expiración. La documentación para esto se puede encontrar en .

+0

Esto es genial! No tenía idea de que esto existía. Me salvaste el día, Douglas. Muchas gracias! –

Cuestiones relacionadas