簡體   English   中英

Rails has_many:通過復雜查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM