我有两个班级
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查询来获取此患者列表吗?
答案 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
这一切都假设你有一个完整的?为您的疫苗接种模型定义的方法。