我正在构建一个rails应用程序并尝试使用Activerecord在数据库中查找记录。有多个模型,其中大多数是一对多关系,但一个是多对多关系,我需要能够进行查询,我可以使用各种一对多模型中的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.任何想法?
答案 0 :(得分:1)
您很可能正在寻找IN
条款:
User.joins(:certifications).where(['city_id = 1 AND company_id = 3 AND certification_id IN (5,6)'])
答案 1 :(得分:0)
您必须使用Eager Loading来避免n + 1查询问题。
试试这个 - &gt;
User.includes(:certifications).where([&#39; city_id = 1 AND company_id = 3 AND certification_id IN(5,6)&#39;])。references(:certifications)强>
查看先前查询和最新查询的差异。