我必须为has_and_belongs_to_many关联的名为附件和用户建模。现在我必须找到所有附件排序,以便首先显示具有关联的附件,然后显示没有关联的附件。我怎么能这样做?
答案 0 :(得分:0)
执行此操作的一种简单且相对有效的方法是向Attachment
模型添加counter cache。计数器缓存将存储并保持attachments
表格列中关联数量的最新信息,因此您可以执行Attachment.order( 'user_attachments_count DESC' )
。
不幸的是,HABTM不支持计数器缓存,因此您必须在其他两个模型之间弹出“中间人”模型才能访问连接表。
另一种方式(性能不佳)只需使用:
@attachments = Attachment.includes(:users)
@sorted = @attachments.sort_by {|r| r.to_a.size }.reverse!
好吧,如果它不合适,你总是可以开始出汗SQL查询......