ruby on rails -在一个ActiveRecord查询中应用两个作用域



我的程序模型有这个:

has_many :registry_patient_counts
scope :salary_and_bonus, 
  :joins => :registry_patient_counts,
  :order => "patient_count_percentage DESC"

当我开始使用简单的婴儿步骤时效果很好控制器是这样的:

programs = 
  Program.includes([:registry_patient_counts])
    .salary_and_bonus.where('organization_id = 1')
    .limit(2)

但是我的最终控制器应该看起来像这样(没有作用域的样子)

@programs = Program.includes(
  [:registry_patient_counts, measures: :measures_off_targets])
  .where('organization_id = 1')
  .limit(2)

注意它有一个额外的measures: :measures_off_targets。因此,类似地,在measures和measures_off_targets之间,我想定义一个与前一个类似的作用域....但我不明白如何在控制器中键入这两个范围?


编辑:这就是我们目前得到的答案:

在Program.rb:

scope :rpc,   includes(:registry_patient_counts).order => "patient_count_percentage DESC"
scope :msr, includes(measures: :measures_off_targets)

控制器查询是这样的:

@programs2 = Program.rpc.msr.where('organization_id: 1').limit(2)

RubyMine在IDE中显示的错误是"cannot find msr"如果我忽略它并转到浏览器,仍然在Rail控制台中,我得到一个"错误500,错误的请求",没有任何返回。

可以链接作用域和include。

scope :rpc, includes(:registry_patient_counts)
scope :msr, includes(measures: :measures_off_targets)
@programs = Program.rpc.msr.where(organization_id: 1).limit(2)
# Equivalent to
@programs = Program.includes(
  [:registry_patient_counts, measures: :measures_off_targets])
  .where(organization_id: 1)
  .limit(2)

最新更新