如何查询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 }
答案 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"