2012-01-24 15 views
0

これは私にはちょっと混乱しているかもしれませんが、それは正当化されないかもしれませんが、私は何らかの入力を希望します。Rails 3ユーザーの活動履歴データ

私は、メディアファイルを見ることができるユーザーとレール3.1.3アプリケーションを持っています。私は彼らのメディアの視聴に関して彼らの活動の歴史を保存したい。目標は、ユーザまたはメディアからそれを追跡することができるように履歴を記録することである。 user.history()およびmedia.history()のデータを取得して、ユーザーがアクセスしたすべてのメディアと特定のメディアにアクセスしたすべてのユーザー、および各トランザクションに関するその他のデータを表示します。

これまでのところ、私は、これは一種の、このように、各トランザクションのための単一の履歴オブジェクトを作成することであることを合理的に満たすを思い付くことができた唯一の方法:これについては私に関係

class history_item 
    belongs_to: media_object 
    belongs_to: user 
    (other transaction-specific data) 
end 

何されますデータベースエントリの数は、このアプリケーションの典型的な使用と急速に急増します。私が考えていないこの問題にアプローチする良い方法はありますか?私はレールと大規模なWebアプリケーションの開発に一般的ではないので、この種のことが普通に行われているかどうかは完全にはわかりません。

答えて

0

UserMediaObjectの間のHABTMモデルとしてViewingクラスのモデルを作成します。これにより、実際の構造はhistoryという関係を持つよりもはっきりしたものになります。もちろん、あなたが記述した正確なインターフェースが必要な場合は、User#historyMediaObject#historyのメソッドを追加することもできます。

class User 
    has_many :viewings 
    has_many :viewed_media_objects, :through => :viewings 
end 

class MediaObject 
    has_many :viewings 
    has_many :viewers, :through => :viewings 
end 

class Viewing 
    belongs_to :user 
    belongs_to :media_object 
end 

これらのオブジェクトを照会する場合、user = User.first与え例えば、あなたが、ユーザーのviewed_media_objectsアクションでを反復処理したいことを知っていれば、あなたは必ずレールを作るために@user = User.include(:viewed_media_objects).find(params[:id])を使用することができますに関連する視聴やメディアオブジェクトをフェッチユーザーと同じ時間。このようにして、データベース呼び出しの全体を取得することはありません。

関連する問題