2011-06-30 19 views
6

Rails 3を使用してAPIを開発しています。ユーザーは電話、メール、ウェブサイト、アドレスなど複数の連絡先アイテムを持つことができます。各項目には独自のモデルがあります。Rails 3.最新のアップデートを入手

このAPIを使用しているiPhoneアプリでキャッシュを行う必要があるため、アイテムの最新の更新が発生し、キャッシュファイルのタイムスタンプと一致する日付を取得する必要があります。

(すべてのアイテムテーブルを比較すると)最新のアイテムを取得するにはどうすればよいですか?

このように各アイテムテーブルの最新のアイテムを取得しています。これは本当にいいですか?

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

ありがとうございました!

答えて

13

ActiveRecordのtouchメソッドを使用できます。これは、多くの子レコードを持つ親レコードが1つある場合に特に便利です。子レコードが保存または破棄されるたびに、親レコードの現在のフィールドにはupdated_atフィールドが設定されます。

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 

今すぐ任意の時間は、アドレスや電話が更新され、ユーザーのupdated_atは、現在の時刻に設定されます。現在のユーザーのために最後に更新が行われたとき

を確認するには、すべてのテーブルの上に、あなたは今:

@last_updated = @user.updated_at 

あなたのキャッシュをチェックする上で単純なクエリで多くのことを得書き込みに小さなオーバーヘッドについて有効期限。このドキュメントはにあります。

+0

これはとてもクールです!私はこれが存在するかどうか分からなかった。あなたは私の日ダグラスを救った。どうもありがとうございます! –

関連する問題