2

我正在尝试在这里做一个基本报告

  • 显示包含姓名、年龄等详细信息的用户列表。
  • 还显示其他详细信息,如帖子数量、上次活动时间等。
  • 所有这些其他细节都来自用户的 has_many 关系

这就是我现在正在做的事情:

User.find(
          :all, 
          :select => "users.id, users.name, count(distinct(posts.id)) as posts_count",
          :joins => "left outer join posts on posts.user_id = users.id",
          :group => "users.id",
          :limit => "100"
)

已索引帖子表中的user_id

我的问题是这样做需要很长时间,有时当我尝试做更多表格以及活动、评论等帖子时会挂起。

有没有办法单独加入计数或其他方式来实现这一目标?

提前致谢

4

1 回答 1

1

我认为其中之一可能有效,但与往常一样,在进行外部联接时,查询会变慢。

User.count(:include=>[:posts])

User.count(:select => "users.id, users.name, count(distinct(posts.id)) as posts_count",
          :joins => "left outer join posts on posts.user_id = users.id",
          :group => "users.id")

User.find(:all, :include => [:posts])

你也可以在初始化文件或 irbrc 文件中放入:

ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Base.clear_active_connections!

并在控制台中键入查询时检查它们。

对于帖子计数

User.all.posts.size

至于以后报告每个帖子计数,您可以使用您已经拥有的用户记录来做到这一点。

@users = User.find(:all, :include=> [:posts])

之后 ...

<% @users.each do |user|
  Posts: <%= user.posts.size %>
<% end %>

用户按帖子排序

@sorted_users = @users.sort_by{|user| user.posts.size }

https://stackoverflow.com/a/5739222/1354978

于 2012-09-25T05:56:03.273 回答