Rails has_many通过关联如何按子女数量排序?

时间:2011-04-30 23:28:34

标签: ruby-on-rails ruby ruby-on-rails-3

我想创建一个简单的菜单,该菜单按类别(标签)中的产品数量排序

像:

Television (10)
Toothpase  (5)
Computer   (3)

我的控制器:

def tags
  @tags = Tag.all
end 

我的观点:

<% @tags.each do |tags| %>
  <li><%= tags.name %>    <%= tags.konkurrancers.count %></li>
<% end %>

我的模特:

has_many :konkurrancers, :through => :tagsmenus

1 个答案:

答案 0 :(得分:3)

def tags
  @tags = Tag.all.sort_by{|t| -t.konkurrancers.count }
end

如果这样做证明太慢,你应该将一个counter_cache列(名为children_count)添加到tags表中以获得速度,这样你就可以这样做:

def tags
  @tags = Tag.all(:order => 'children_count DESC')
end