ruby on rails -使用Activerecord在多个条件下查找对象,包括一个范围



我正在构建一个rails应用程序,并试图使用Activerecord在DB中找到记录。有多个模型,其中大多数是一对多关系,但一个是多对多关系,我需要能够做一个查询,我可以使用id从各种一对多模型,然后为多对多数组。

模型如下:

class User < ActiveRecord::Base
    belongs_to :city
    belongs_to :company
    belongs_to :certification
    has_many :user_certifications
    has_many :certifications, :through => :user_certifications
end
class Certification < ActiveRecord::Base
    has_many :user_certifications
    has_many :users, :through => :user_certifications
end
class City < ActiveRecord::Base
    has_many :users
end

我可以成功地执行如下查询:

User.where(['city_id = 1 AND company_id = 3'])

或者使用连接和单独认证的东西

User.joins(:certifications).where(['city_id = 1 AND company_id = 3 AND certification_id = 5'])

但是由于一个用户可以有多个认证,我需要能够搜索城市1、公司3和认证5 + 6。什么好主意吗?

您很可能正在寻找IN子句:

User.joins(:certifications).where(['city_id = 1 AND company_id = 3 AND certification_id IN (5,6)'])

必须使用Eager Loading来避免n+1查询问题。

try this ->

User.includes(认证)。where(['city_id = 1 AND company_id = 3 AND certification_id IN (5,6)']).references(: certificates)

查看先前查询和最新查询的差异。

最新更新