Ruby on rails 具有嵌套关联和组的Rails查询(按关联对象)

Ruby on rails 具有嵌套关联和组的Rails查询(按关联对象),ruby-on-rails,ruby,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,鉴于此模型关系: orders.rb belongs_to user user.rb belongs_to company company.rb has_many users 我想统计每家公司的所有订单,所以我得到了这个: Order.joins(user: :company) .group(['companies.name, companies.id]) .count 结果是 [“公司1”,1]=>123 但我不知道如何将此查询更改为 <Company id: 1,name: "

鉴于此模型关系:

orders.rb
belongs_to user

user.rb
belongs_to company

company.rb
has_many users
我想统计每家公司的所有订单,所以我得到了这个:

Order.joins(user: :company)
.group(['companies.name, companies.id])
.count
结果是

[“公司1”,1]=>123

但我不知道如何将此查询更改为

<Company id: 1,name: "Jim Beam"> => 5
=>5

而不是公司属性的数组。

可以通过向模型中添加另一个关联来简化此操作:

# company.rb
has_many :users
has_many :orders, through: :users
然后你可以这样做:

   companies = Company.
               joins(:orders).
               group("company.id").
               select("company.id, company.name, count(orders.id) as orders_count")
如果你接着说
公司。首先你会看到如下内容:

#<Company:0x005610fa35e678 id: 15 name: 'foo'>
companies.first.orders_count
如果将公司转换为哈希,也可以看到:

companies.first.attributes # => { id: 15, orders_count: 2, name: "foo" }

至少在Postgres中,如果要在属性哈希中获取更多数据,必须在
select
字符串中单独指定每一列。我不确定是否有其他数据库。

是否有同名的不同公司?(我试图理解为什么你需要根据姓名和身份进行分组)@Joel_Blum,不,我没有。我只想得到一个带有id和name的散列作为这个查询的结果,因为以后从这样的结构中获取一些值,而不是通过数组的索引获取值,会更容易、更可读。