[英]Rails has_many :through complex query
我有has_many這三個模型:通過關系:
class Package < ApplicationRecord
belongs_to :user
belongs_to :shipment
end
class User < ApplicationRecord
has_many :packages
has_many :shipments, through: :packages
end
class Shipment < ApplicationRecord
has_many :packages
has_many :users, through: :packages
end
給定一些貨件@shipment,我想按user_id分組來獲取該貨件的所有用戶,然后為每個用戶獲取他們在此特定@shipment中獲得的包裹。 通過使用:
@shipment.users.each do |user|
user.packages
end
我正在獲取所有用戶軟件包的列表 ,但是我只需要獲取@shipment中的軟件包 。 我該如何查詢?
如果您希望保留與當前相同的表格。 嘗試類似:
@shipment.users.group(:email).each do |user|
user.packages(where: @shipment)
end
看來您可以從@shipment.packages
開始,然后按user_id
對其進行分組,如下所示:
@shipment.packages.group_by(:user_id)
結果,您將獲得一個由user_id
索引的哈希,其中值是具有給定user_id
的貨件包裹列表。
例如,假設您具有以下軟件包:
+----------------------------+
| id | user_id | shipment_id |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 3 |
| 4 | 2 | 1 |
| 5 | 3 | 1 |
| 6 | 2 | 1 |
+----------------------------+
然后,您將獲得如下內容:
@shipment = Shipment.find(1)
@shipment.packages.group_by(&:user_id) #=> {1 => [<Package id=1>], 2 => [<Package id=4>, <Package id=6>], 3 => [<Package id=5>]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.