neo*_*neo 1 ruby-on-rails rails-activerecord
用户有很多帖子.
class User
has_many :posts
end
Run Code Online (Sandbox Code Playgroud)
帖子属于用户.
class Post
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
我试图找到所有的帖子被发布由用户是管理员.
我试过了:
Post.where(status: 'published').includes(:user).where(users: { admin: true })
Run Code Online (Sandbox Code Playgroud)
我明白了:
PG::AmbiguousColumn: ERROR: column reference "admin" is ambiguous
Run Code Online (Sandbox Code Playgroud)
您可以使用ActiveRecord::Relation大多数范围方法来构建复杂查询.例如:
Post.where(status: 'published', user: User.where(admin: true)).includes(:user)
Run Code Online (Sandbox Code Playgroud)
这应该生成两个查询; 一个将包含具有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)
Run Code Online (Sandbox Code Playgroud)
干杯!
| 归档时间: |
|
| 查看次数: |
2916 次 |
| 最近记录: |