用户有很多帖子。
class User
has_many :posts
end
帖子属于用户。
class Post
belongs_to :user
end
我正在尝试查找用户 发布 管理 的所有帖子。
我试过了:
Post.where(status: 'published').includes(:user).where(users: { admin: true })
我明白了:
PG::AmbiguousColumn: ERROR: column reference "admin" is ambiguous
答案 0 :(得分:6)
您可以将ActiveRecord::Relation
交给大多数范围方法来构建复杂查询。 E.g:
Post.where(status: 'published', user: User.where(admin: true)).includes(:user)
这应该生成两个查询;一个将包含具有admin条件的用户的子查询,另一个将加载用户(急切加载)。
请注意,您可以使用范围简化这些查询,这样可以使列的详细信息成为模型的责任:
class User < ApplicationRecord
scope :admin, -> { where(admin: true) }
end
class Post < ApplicationRecord
scope :published, -> { where(status: 'published') }
end
# posts from admin users, with eager loaded users
Post.published.where(user: User.admin).includes(:user)
干杯!
答案 1 :(得分:0)
添加更详细的@ coreyward的答案,如果你想要没有子查询,你可以更明确地指定users
条件:
Post.where(status: 'published').
includes(:user).
references(:user).
where('users.admin = ?', true)
这将生成正确的LEFT OUTER JOIN
查询。