ruby-on-rails - rails, ruby​​, 如何计数和排序,显示最佳结果

标签 ruby-on-rails ruby model count

我想我在这里有一个简单的问题:

我有一个用户模型和一个帖子模型。用户有很多帖子,帖子属于用户。我想按用户统计帖子总数,并显示帖子最多的前 10 个用户。这是我到目前为止的代码:

Controller :

@users = User.all

查看:

<% @users.sort.each do |user| %>
    <%= user.username %>: <%= user.posts.count(:group => 'user_id') %><br>
<% end %>

这让我得到每个用户的帖子总数,但按用户名排序。我明白为什么会这样,但不确定如何更改它以改为按计数排序。任何帮助将不胜感激!

最佳答案

Rails 有 counter_cache 您可以阅读本指南的第 4.1.2.3 点 belongs_to Association Reference .

首先,您应该在 User 模型上有一个 posts_count 列,该列具有 integer 数据类型和 0 默认值。添加posts_count列后,将counter_cache添加到Post.rb

class Post < ActiveRecord::Base
  belongs_to :user, :counter_cache => true
end

如果您添加一条包含用户的帖子记录,它会自动将1 值添加到User 模型的posts_count 属性中。所以如果你想显示帖子最多的前 10 个用户。你可以试试这个:

@user = User.find(:all, :limit => 10, :order=> 'posts_count desc')

或者另一种方法。使用 scopes

您可以为您的用户模型添加作用域

Class User < ActiveRecord::Base
 scope :top_ten, select("users.id, other_attribute, count(posts.id) AS posts_count"). joins(:posts).group("users.id").order("posts_count DESC").limit(10)
end

在你的 Controller 上:

@user = User.top_ten

关于ruby-on-rails - rails, ruby​​, 如何计数和排序,显示最佳结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26542223/

相关文章:

jsp - 如何将对象传递给 View Spring MVC3

asp.net-mvc-3 - 查看方法指定模型

razor - 输入隐藏显示不正确的 ID (Guid.Empty)

html - 隔行 | Haml 表的第 N 列

ruby-on-rails - Gem 以协助监控代码质量

ruby-on-rails - 如何在 Rails 中显示 URL 指向的图像

ruby - ||= 在 Ruby 中是什么意思?

ruby-on-rails - 如何在 rails 上安装 ruby

ruby-on-rails - 通过用户名查找用户或使用一个字段的电子邮件

ruby - 如何向 ruby​​ -n -e 提供 $INPUT_RECORD_SEPARATOR?