如何在Rails中查询自引用“has_many:through”关系的反转?

时间:2017-02-11 22:24:32

标签: mysql ruby-on-rails ruby-on-rails-5 relationships

我们的Rails应用程序在has_many类上使用自引用User关系来跟踪以下内容。这可以找到followed_users

class User < ApplicationRecord
  has_many :followings
  has_many :followed_users, through: :followings
end

class Following < ApplicationRecord
  belongs_to :user
  belongs_to :followed_user, class_name: 'User'
end

我被特别要求创建一个has_many :follower_users。我似乎无法生成正确的查询来获得逆。我最接近的是一个有效的实例方法

def followers
  User.includes(:followings).where followings: { followed_user_id: id }
end

但我被告知要通过has_many查询反向,而不是实例方法。

这可能吗?

1 个答案:

答案 0 :(得分:2)

我在阅读this帖子后解决了这个问题:

has_many :followers, foreign_key: :followed_user_id, class_name: 'Following'
has_many :follower_users, through: :followers, source: :user

我对首次定义连接关系的方式存在误解,然后(实际上)跟随连接到User类。这是我错误的假设,我可以在一个声明中直接描述连接。