4

自己結合関連付けの列にカウンター キャッシュを追加しようとしています。User と follows の 2 つのモデルがあります。ユーザーには、ユーザー テーブル自体からのフォロワーとフォロワーがいます。

User.rb

  has_many :followings
  has_many :followers, :through => :followings
  has_many :followees, :through => :followings

Following.rb

class Following < ActiveRecord::Base
  attr_accessible :followee_id, :follower_id
  belongs_to :follower, :class_name => "User" 
  belongs_to :followee, :class_name => "User"
end

と にカウンター キャッシュを追加したいと思いfollowerますfollowees。テーブルに列がありfollowers_countます。followees_countuser

私は試した

belongs_to :follower, :class_name => "User" , :counter_cache => true

しかし、これは user テーブルにデータを返しません。どんな助けでも大歓迎です。

4

2 に答える 2

3

ずいぶん前のことですが、

ユーザー.rb

class User < ActiveRecord::Base
  has_many :followings_as_follower, class_name: 'Following', foreign_key: 'follower_id', dependent: :destroy
  has_many :followings_as_followee, class_name: 'Following', foreign_key: 'followee_id', dependent: :destroy
  has_many :followers, through: :followings_as_followee, source: :follower
  has_many :followees, through: :followings_as_follower,  source: :followee

  def follow?(user)
    followees.reload.include? user
  end

  def follow(user)
    return if follow?(user)
    followings_as_follower.create(followee: user)
  end

  def unfollow(user)
    return unless follow?(user)
    followings_as_follower.where(followee: user).first.destroy
  end
end

フォロー中.rb

class Following < ActiveRecord::Base
  belongs_to :follower, class_name: 'User', counter_cache: :followees_count
  belongs_to :followee, class_name: 'User', counter_cache: :followers_count
  validates :follower, presence: true
  validates :followee, presence: true
  validates :followee, uniqueness: { scope: [:follower, :followee] }
end
于 2015-03-11T00:52:08.387 に答える
2

これを試して、

belongs_to :follower, foreign_key: 'the_id_of_foreign_key', class_name: 'User', counter_cache: :followers_count

inのcolumn_name代わりに を使用できます。truecounter_cache

于 2013-02-28T11:01:25.733 に答える