0

私のプログラムモデルにはこれがあります:

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 に表示するエラーは、「msr が見つかりません」というものです。それを無視してブラウザーに移動すると、Rail コンソールに「エラー 500、不正な要求」が表示され、何も返されません。

4

1 に答える 1

0

スコープとインクルードを連鎖させることができます。

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)
于 2013-03-03T08:32:15.393 に答える