Rails 6.1 self referential has_many missing



Rails 6.1添加了missing方法来查找孤儿记录,但我正在努力将其应用于自我引用的has_many

考虑这个模型:

class Item < ApplicationRecord
belongs_to :parent_item, class_name: "Item"
has_many :child_items, class_name: "Item", foreign_key: :parent_item_id
has_many :approved_child_items, -> { approved }, class_name: "Item", foreign_key: :parent_item_id
scope :approved, -> { where.not(approved_at: nil) }
# This doesn't work:
scope :no_child_items, -> { where.missing(:child_items) }
# This doesn't work either:
scope :no_approved_child_items, -> { where.missing(:approved_child_items) }
end

我想找到所有没有child_itemsItems

我如何得到no_child_itemsno_approved_child_items范围的工作?

看一下实现,新方法似乎只是旧方法(具有left_joins的方法)的一个糖,但只是它的简单形式。对于自引用关系,你可以做

.left_joins(child_items: :items)

,但在missing中似乎不支持。因此,您可能无法使用missing来完成此操作。用left_joins代替。

最新更新