根据一组相关记录的条件获取记录

时间:2015-04-22 01:49:19

标签: sql ruby-on-rails ruby activerecord

我有两个班级

class Patient < ActiveRecord::Base
  belongs_to :camp
  has_many :vaccinations
end

class Vaccination < ActiveRecord::Base
  belongs_to :patient
end

每次疫苗接种都有名为vaccine_id的成员。 A&#39;完成&#39;疫苗接种由一组(比如说)6种不同的疫苗组成,:name s = {A,B,C,D,E,F}。

患者接种了许多疫苗,我希望收到所有接受过“完整”疫苗接种的患者的报告。接种疫苗。我可以使用SQL或ActiveRecord查询来获取此患者列表吗?

2 个答案:

答案 0 :(得分:1)

也许是这样的:

# in patient.rb
scope :with_completed_vaccinations, ->(number) {
  joins(:vaccinations).group('patients.id').
    having('COUNT(vaccinations.name) >= ?', number)
}

使用此scope,您可以编写如下查询:

Patient.with_completed_vaccinations(6)

答案 1 :(得分:0)

这是让所有接受过至少一次完整疫苗接种的患者的简单方法:

Patient.select { |pat| pat.vaccinations.any? { |vac| vac.complete? } }

对于所有疫苗接种完成的患者,只需切换.any?用.all?

您可以将其包装在范围内,例如将此方法放入您的患者中.rb

def self.with_complete_vaccinations
  select { |pat| pat.vaccinations.any? { |vac| vac.complete? } }
end

这一切都假设你有一个完整的?为您的疫苗接种模型定义的方法。

相关问题