根据habtm关联对模型元素进行排序

时间:2011-12-29 06:06:25

标签: ruby-on-rails ruby model-view-controller model associations

我必须为has_and_belongs_to_many关联的名为附件和用户建模。现在我必须找到所有附件排序,以便首先显示具有关联的附件,然后显示没有关联的附件。我怎么能这样做?

1 个答案:

答案 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查询......