2

Programのクラスには has_manyがPatients あり、Patientクラスには次のようなフィールドがありますsalary

JBuilder に渡す jsonrespond_to :json , respond_with(@org)は次のようになります。

@org = Org.includes(programs: [{hospitals: :nurses}, :patients]).find(params[:id])

さて、私のデータベースにorg_id = params[:id]条件を満たした 200 個のプログラムがある場合、それらすべてが返されます。しかし、これは私が望むものではありません。「5」個のプログラムと、「患者」テーブルの「給与」フィールドが最も高い「5」個のプログラムを返すように指示したいと思います。

アクティブ レコード クエリでこの制限を実装するにはどうすればよいですか?

4

1 に答える 1

1

何かのようなもの

Program.includes([{hospitals: :nurses}, :patients]).where("organization_id = ?", params[:id]).order("patients.salary desc").limit(5)

または、次のことができます。

@program_ids = Program.select("id").includes([{hospitals: :nurses}, :patients]).where("organization_id = ?", params[:id]).order("patients.salary desc").limit(5)
@org = Org.includes(programs: [{hospitals: :nurses}, :patients]).where("programs.id = ?", program_ids.collect(&:id)).find(params[:id])

次の質問を確認することで、サブクエリを使用して 1 ステップ (まだ 2 つのクエリ) でリファクタリングすることもできます。

アクティブレコードのサブクエリ

1回のクエリでその情報を取得できるかどうかはわかりません

于 2013-03-03T01:47:48.283 に答える