如何获取按WorkCenter分组的具有最低值的项目列表?

时间:2018-12-31 23:10:03

标签: ruby-on-rails postgresql

我有三个相关的类:Item可以要求完成任意数量的WorkCenters才能完成Item,而StatusUpdate用于记录Item的{​​{1}}完成后。

WorkCenter
class Item < ApplicationRecord
  has_many :status_updates, dependent: :destroy
  has_many :routings,       dependent: :destroy
  has_many :work_centers,   through: :routings
  ...
end
class WorkCenter < ApplicationRecord
  has_many :status_updates, dependent: :destroy
  has_many :routings,       dependent: :destroy
  has_many :items,          through: :routings
  ...
end

我正在尝试生成一个kanban board,该列表包含每个包含class Routing < ApplicationRecord belongs_to :item belongs_to :work_center ... end 的{​​{1}}的列表。每个WorkCenter仅应存在于一个列表中,并且应包含在Items属性最低的Item中,而该属性没有包含该{{1}的WorkCenter }和sequence

我可以使用以下方法获取给定StatusUpdate的未完成Item的列表:

WorkCenter

但是我不确定该如何解决。似乎我想要WorkCenters,其中Item不在WorkCenter.where('id NOT IN (SELECT work_center_id FROM status_updates WHERE item_id = ?)', item.id) .where('id IN (SELECT work_center_id FROM routings WHERE item_id = ?)', item.id) 分组的Routings中,然后我需要以某种方式确定{{1}在哪个列表中}。

修改1/1/19: 我可以使用以下内容构建work_center_idStatusUpdate的哈希值:

work_center_id

但是,我希望所有这些都在一个查询中完成,而不是每个Items一次。它还为尚未完成的每个WorkCenters包含一个Items,但是@wc_items = HashWithIndifferentAccess.new WorkCenter.all.each do |wc| @wc_items[wc.id] = Item.where('id IN (SELECT item_id FROM routings WHERE work_center_id = ?)', wc.id) .where('id NOT IN (SELECT item_id FROM status_updates WHERE work_center_id = ?)', wc.id) end 应该只出现在一个列表中(WorkCenter的{​​{1}最低}。

0 个答案:

没有答案