ruby-on-rails – 如何在Rails 3.1中使用group()向COUNT列添加COUNT列

我有一个UserProfile列表,可能(或可能不)有一个或多个小部件:

class UserProfile < ActiveRecord::Base
  has_many :widgets
end

@all_profiles = UserProfile.joins(:widgets).group('user_profiles.id').order("name ASC")

在索引视图中,没有在视图的EACH行中执行新查询获取@ all_profile.each的小部件计数,是否有一种方法可以向原始位置添加计数列,以显示每个小组中的小部件数量行? (例如,如果有N @all_profiles,请避免重新查询数据库N次?

(这不仅对于避免N个额外查询很重要,而且它允许我们在count列上添加SORT选项,以便我们可以按最多小部件的客户进行排序)

解决方法

您可以通过 ActiveRecord::QueryMethods#select添加COUNT列

@all_profiles = UserProfile.joins(:widgets).select('user_profiles.*,COUNT(*) AS widget_count').group('user_profiles.id').order('name ASC')

现在,每个返回的对象都将包含一个widget_count属性,您可以像访问任何其他模型属性一样访问该属性

@all_profiles.each do |profile|
  puts profile.widget_count
end

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...