我想显示所有最常用的邮件标签列表。
我的控制器目前有:
@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(..)来使用控制器,但似乎不太好。
非常感谢任何帮助。
感谢。
答案 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。