ruby-on-rails – 在rails中为自联接表添加计数器缓存
发布时间:2020-12-17 02:38:10 所属栏目:百科 来源:网络整理
导读:我试图在自联接关联中的列上添加计数器缓存. 我有两个型号用户和以下.用户拥有关注者和关注者,他们来自用户表本身. User.rb has_many :followings has_many :followers,:through = :followings has_many :followees,:through = :followingsFollowing.rbclass
|
我试图在自联接关联中的列上添加计数器缓存.
我有两个型号用户和以下.用户拥有关注者和关注者,他们来自用户表本身. 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 现在我想在追随者和追随者上添加计数器缓存.我在用户表中有followers_count和followees_count列. 我试过了 belongs_to :follower,:class_name => "User",:counter_cache => true 但是这不会返回用户表中的任何数据. 解决方法
很久以前,但是
User.rb class User < ActiveRecord::Base
has_many :followings_as_follower,class_name: 'Following',foreign_key: 'follower_id',dependent: :destroy
has_many :followings_as_followee,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
Following.rb class Following < ActiveRecord::Base
belongs_to :follower,class_name: 'User',counter_cache: :followees_count
belongs_to :followee,counter_cache: :followers_count
validates :follower,presence: true
validates :followee,uniqueness: { scope: [:follower,:followee] }
end
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
