如何在Rails中查询自引用"has_many :through"关系的逆?
How to query the inverse of a self-referential "has_many :through" relationship in Rails?
我们的 Rails 应用程序在 User
class 上使用自引用 has_many
关系来跟踪关注者。这可以找到 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
而非实例方法查询逆。
这可能吗?
看了this就解决了 post:
has_many :followers, foreign_key: :followed_user_id, class_name: 'Following'
has_many :follower_users, through: :followers, source: :user
我误解了我首先必须如何定义连接关系,然后(实际上)遵循连接到 User
class。我错误地假设我可以在一个语句中直接描述连接和通过。
我们的 Rails 应用程序在 User
class 上使用自引用 has_many
关系来跟踪关注者。这可以找到 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
而非实例方法查询逆。
这可能吗?
看了this就解决了 post:
has_many :followers, foreign_key: :followed_user_id, class_name: 'Following'
has_many :follower_users, through: :followers, source: :user
我误解了我首先必须如何定义连接关系,然后(实际上)遵循连接到 User
class。我错误地假设我可以在一个语句中直接描述连接和通过。