3

認証にdeviseを使用する単純なレールアプリがあります。特定のページにアクセスしたときに更新される各ユーザーのカウンターを作成することに興味があります。

例えば:

ユーザーカウンター = 4

ユーザーがページ A にアクセス ユーザー カウンター = 3

ユーザーが再びページ A にアクセス ユーザー カウンター = 3

ユーザーがページ B にアクセス ユーザー カウンター = 2

ユーザーに関連付けられたモデルのインスタンスの数をカウントするカウンター キャッシュを調べていましたが、これは正しい方向に進んでいますか? どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

1

この猫の皮を剥ぐ方法は無数にありますが、ここでは 1 つの方法を紹介します。

User を Pages に結合する PageVisits 結合モデルを作成する必要があります。そのモデルには、手動でインクリメントするカウンターがあります。

class User < ActiveRecord::Base
  has_many :page_visits
end

class Page < ActiveRecord::Base
  has_many :page_visits
end

class PageVisits < ActiveRecord::Base
  belongs_to :page
  belongs_to :user
end

class CampaignsController < ApplicationController
  def show
    @page = Page.find(params[:id]

    if current_user
      page_visit = @page.page_visits.where(user_id: current_user.id).first_or_create
      page_visit.increment(:visits)
    end

    respond_with(@page)
  end   
end

私が言ったように、多くの方法で、これは単純な方法の 1 つにすぎません。個人的には、この種のタスクには redis を使用します。

于 2013-04-17T20:27:09.387 に答える