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_items
的Items
。
我如何得到no_child_items
和no_approved_child_items
范围的工作?
看一下实现,新方法似乎只是旧方法(具有left_joins
的方法)的一个糖,但只是它的简单形式。对于自引用关系,你可以做
.left_joins(child_items: :items)
,但在missing
中似乎不支持。因此,您可能无法使用missing
来完成此操作。用left_joins
代替。