如何用Active Record Query查询current_user的粉丝列表?
获取当前用户的粉丝列表解决方案
模型与现有关联
模型结构
User模型Followed模型,核心字段:user_id:发起关注操作的用户ID(即粉丝的ID)followed_id:被关注的用户ID
现有关联代码
User 模型
has_many :followeds, foreign_key: :followed_id, dependent: :destroy
Followed 模型
belongs_to :user
实现方案
直接查询方式
你之前的代码接近正确,但需要明确关联users表和followeds表的对应关系(粉丝的ID等于followeds.user_id),可以通过显式JOIN语句实现:
@followers = User.joins("JOIN followeds ON users.id = followeds.user_id") .where(followeds: { followed_id: current_user.id })
优雅优化:新增关联
为了后续代码更简洁,建议在User模型中添加一个粉丝关联:
# 在 User 模型中新增 has_many :followers, through: :followeds, source: :user
之后获取粉丝列表只需直接调用:
@followers = current_user.followers
逻辑说明
- 原
User模型的followeds关联,是将当前用户作为被关注者(通过foreign_key: :followed_id关联到followeds.followed_id) - 新增的
followers关联通过through: :followeds,借助source: :user指定关联到发起关注的用户(即followeds.user_id对应的User记录),直接获取所有关注当前用户的粉丝
内容的提问来源于stack exchange,提问作者user20217103
相关产品推荐
相关产品推荐

