我有两种模式:
class Doctor < ActiveRecord::Base
has_and_belongs_to_many :branches
end
class Branch < ActiveRecord::Base
has_and_belongs_to_many :doctors
end
我想通过分支名称ASC或Desc来命令医生列表(索引操作)。我怎么能这样做?
答案 0 :(得分:1)
我不认为HABTM协会在这种情况下的工作方式与其他任何一对多协议不同,因此您使用select()
,group()
和order()
,可能是这样的:
@doctors = Doctor.joins(:branches).group('doctors.id').order('max(branches.name)')
当然,您需要选择如何聚合 - 医生可以拥有多个分支,因此您必须指定在排序中使用的名称 - 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
)。