我正在构建一个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)