RUBY ON RAILS 关联关系查询

RUBY ON RAILS QUERY FOR ASSOCIATION RELATION

class Persson
   has_many : accounts
   has_many : computers, through : :accounts
end

class Account
   belongs_to : person
   belongs_to : computer
   scope :administrtor, -> { where(role : 'administrator') }
end

class Computer
  has_many :accounts
  has_many :person, though: :accounts
end

1.Find 此人(id: 39) 为管理员的所有计算机。

2.Find在一台以上的计算机中担任管理员的所有人。

3.Find 所有只有一个管理员的计算机。

嘿,请查看协会 rails 文档 doc 假设您正在按照问题的解决方案使用 PostgreSQL

1.

Person.includes(:accounts).find(1).computers.where("accounts.role =?", 'administrator')

2.

Person.where(id: Account.administrtor.group("accounts.person_id").having("count(accounts.person_id) > 1").pluck("accounts.person_id"))

3.

Computer.where(id: Account.administrtor.group("accounts.computer_id").having("count(accounts.computer_id) = 1").pluck("accounts.computer_id"))