查询空的has_many通过

时间:2016-10-11 14:57:20

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

如何查询has_many :through以查看哪一条记录在另一方有空关联? (我使用的是铁轨5)

class Specialty
  has_many :doctor_specialties
  has_many :doctor_profiles, through: :doctor_specialties

class DoctorProfile
  has_many :doctor_specialties
  has_many :specialties, through: :doctor_specialties

class DoctorSpecialty
  belongs_to :doctor_profile
  belongs_to :specialty

我可以通过枚举Specialty来执行此操作,但我想在SQL查询中执行此操作。

Specialty.includes(:doctor_profiles).all.select{|x| x.doctor_profiles.length == 0 }

3 个答案:

答案 0 :(得分:4)

Specialty.includes(:doctor_profiles).where(doctor_profiles: { id: nil })

有关AR查询的详细信息,请参阅Active Record Query Interface

由于你使用Rails> = 5,你可以使用left_outer_joins(thx @gmcnaughton ):

Specialty.left_outer_joins(:doctor_profiles).where(doctor_profiles: { id: nil })

答案 1 :(得分:1)

您也可以使用以下查询来实现此目的。

Specialty.where.not(id: DoctorSpecialty.select(:speciality_id))

上面的语句将在查询中创建一个查询。不需要表连接。

答案 2 :(得分:0)

origin: "2016-05-01 00:00:00"