[英]Rails Query with nested association and group ( by associated object)
給定此模型關系:
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
而不是公司屬性的數組。
通過向模型添加另一個關聯,可以使此過程更容易:
# 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")
如果您接着說companies.first
您將看到類似以下內容:
#<Company:0x005610fa35e678 id: 15 name: 'foo'>
它看起來好像不存在orders_count
。 但實際上它已經被加載了。 您可以這樣實現:
companies.first.orders_count
如果將公司轉換為哈希,也可以看到它:
companies.first.attributes # => { id: 15, orders_count: 2, name: "foo" }
至少在Postgres中,如果要在屬性哈希中獲取更多數據,則必須分別指定select
字符串中的每一列。 我不確定其他數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.