首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据一组相关记录的条件获取记录

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

Stack Overflow用户
提问于 2015-04-22 09:49:19
回答 2查看 47关注 0票数 2

我有两节课

代码语言:javascript
复制
class Patient < ActiveRecord::Base
  belongs_to :camp
  has_many :vaccinations
end

class Vaccination < ActiveRecord::Base
  belongs_to :patient
end

每种疫苗接种都有名为vaccine_id的成员。一个“完整的”疫苗接种包括一组(比如说)6种不同的疫苗,:names = {A,B,C,D,E,F}。

患者接受了许多疫苗接种,我想要一份所有接受“完全”疫苗接种的患者的报告。有没有一个SQL或ActiveRecord查询可以用来获取这个患者列表?

EN

回答 2

Stack Overflow用户

发布于 2015-04-22 10:02:07

可能是这样的:

代码语言:javascript
复制
# in patient.rb
scope :with_completed_vaccinations, ->(number) {
  joins(:vaccinations).group('patients.id').
    having('COUNT(vaccinations.name) >= ?', number)
}

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

代码语言:javascript
复制
Patient.with_completed_vaccinations(6)
票数 1
EN

Stack Overflow用户

发布于 2015-04-22 18:32:42

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

代码语言:javascript
复制
Patient.select { |pat| pat.vaccinations.any? { |vac| vac.complete? } }

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

您可以将其封装在一个作用域中,例如,通过将此方法放入patient.rb中

代码语言:javascript
复制
def self.with_complete_vaccinations
  select { |pat| pat.vaccinations.any? { |vac| vac.complete? } }
end

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29786317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档