2

画像ギャラリーであるモデルがあります。画像が何回閲覧されたかを追跡したい。現在、コントローラーでこれを達成しています

 def show
    @article = Post.find(params[:id])
    @article.views += 1
    @article.save
 end

ただし、これはビュー全体にアクセスするときにビュー カウンターをインクリメントするだけです (この方法では、テンプレートをキャッシュすることもできません)。また、サムネイルがインデックス コレクション ビューに表示されたとき (それらも有効なインプレッションであるため)、検索、その他の「いいね」や「お気に入り」などの表示でビューを増やしたいと考えています。

つまり、画像全体または画像のサムネイルが表示されるたびに、ビュー カウンターをインクリメントしたいと考えています。レールでこれを達成するためのパターン/パラダイムはありますか?

ページが読み込まれた後、ページ上のすべての投稿IDのリストを取得し、それらすべての投稿のビューカウンターをインクリメントする別のコントローラーをajaxlyにヒットするように、これをjavascriptで行う必要がありますか?

4

1 に答える 1

0

ルートを上書きできます。私はプロジェクトでこれを一度やった:

/user_images/#{random}.jpg =>これをコントローラーにルーティングしました。コントローラーはデータベースから画像を取得し、インクリメントしてから提供します。これには効果もあります。誰かがこの画像をクロスリンクすると、カウントされます。

しかし、大きな問題があります。 コストパフォーマンスです。私は恐ろしく、イメージホストでこれを始めました! それから私はそれを変更しました。毎時間、cronjob を使用して Apache のログファイルを渡し、ビューをカウントしています。次に、それをデータベースに追加します。これにより、パフォーマンスリークがすべて修正されました。

于 2011-12-27T06:23:38.637 に答える