最常用的Rails排序标签(tag.posts.count)

时间:2011-01-15 20:27:52

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

我想显示所有最常用的邮件标签列表。

我的控制器目前有:

@tag_list = Tag.all

我的观点有:

<% @tag_list.each do |tag| %>
  <%= tag.name %>(<%= tag.posts.count %>)
<% end %>

编辑关系如下:

Tag (has_many :posts, :through => :taggings) 
Tagging(belongs_to :tag and belongs_to :post)
Post(has_many :tags, :through => :taggings)

这显示了所有带有计数的标签。我曾尝试使用Tag.order(..)来使用控制器,但似乎不太好。

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:4)

您可以通过将counter_cache选项添加到关联来告诉rails自动维护使用标记的帖子数。

在您的代码模型上:

has_many :posts, :counter_cache => true

在你的帖子模型上:

belongs_to :tag, :counter_cache => true

通过迁移:

add_column :tags, :posts_count, :integer, :null => false, :default => 0

每次添加带有该标签的帖子时,标签计数器都会递增1。然后,您可以轻松地执行订单:

Tags.order('posts_count')

可以找到有关ActiveRecord关联方法和选项的更多信息here