Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails按最常用的标签排序(tag.posts.count)_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

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')