Ruby on rails Rails按最常用的标签排序(tag.posts.count)
我想显示一个列表的所有邮政标签排序他们最常用的 我的控制器当前有:Ruby on rails Rails按最常用的标签排序(tag.posts.count),ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我想显示一个列表的所有邮政标签排序他们最常用的 我的控制器当前有: @tag_list = Tag.all 我的看法是: <% @tag_list.each do |tag| %> <%= tag.name %>(<%= tag.posts.count %>) <% end %> 这将显示所有标记及其计数。我尝试过使用Tag.order(..)来摆弄控制器,但似乎效果不好 任何帮助都将不胜感激 谢谢。通过向关联添加counter\u cac
@tag_list = Tag.all
我的看法是:
<% @tag_list.each do |tag| %>
<%= tag.name %>(<%= tag.posts.count %>)
<% end %>
这将显示所有标记及其计数。我尝试过使用Tag.order(..)来摆弄控制器,但似乎效果不好
任何帮助都将不胜感激
谢谢。通过向关联添加counter\u 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关联方法和选项的更多信息 我认为,如果Post和Tag处于
has\u和\u属于关系中,那么它将不起作用。。。它们在现实中很可能是这样的,对吧?谢谢你的反馈…我正在使用关系标签(has_许多:posts,:through=>:taggings),标签(属于:Tag,并属于:post),post(has_许多:tags,:through=>:taggings)@Andy:是的,我很确定has_和_属于_很多,这种关系在计数器缓存中不起作用。相反,您需要通过观察者手动维护计数,并将功能添加到模型生命周期的“创建后/销毁后”部分,或者建立多个“通过”关系。@Goldy:有了这些关系,您就可以了。:)@戈蒂:当然可以。如果答案最终为你工作,记得接受它
Tags.order('posts_count')