使用Activerecord查找具有多个条件(包括范围)的对象

时间:2015-05-14 16:14:09

标签: ruby-on-rails ruby-on-rails-4 activerecord

我正在构建一个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.任何想法?

2 个答案:

答案 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)

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