このコンテキストでは、HABTM 関連付けが他の 1 対多と異なる動作をするとは思わないのでselect()
、 、group()
、および を使用するとorder()
、おそらく次のようになります。
@doctors = Doctor.joins(:branches).group('doctors.id').order('max(branches.name)')
当然のことながら、これを集約する方法を選択する必要があります。Doctor は多くのブランチを持つことができるため、順序付けに使用する名前を指定するmax()
必要があります。ニーズに合った正しい集約関数ではない可能性があります。
デフォルトでは内部結合が使用されるため、ブランチが関連付けられていない Doctor モデルは除外されることに注意してください。joins
それをしたくない場合は、次のjoins
ように、内部結合の代わりに左結合を使用するように、おそらく手動で出力を記述する必要があります。
joins('left join branches_doctors on doctors.id = branches_doctors.doctor_id left join branches on branch.id = branches_doctors.branch_id')
HABTM 結合テーブルのデフォルト名は、両方のモデルをアルファベット順に並べた複数形です (つまりbranches_doctors
、 ではなくdoctors_branches
)。