使用偏执狂的默认范围急切加载已删除的记录

Thi*_*ilo 5 ruby-on-rails eager-loading default-scope ruby-on-rails-3

我正在使用paranoia gem 来“软删除”记录。现在,我需要为关联模型立即加载这些记录,其中一些记录可能已被删除。Paranoia 将其添加default_scope到“偏执”模型中:

default_scope :conditions => { :deleted_at => nil }
Run Code Online (Sandbox Code Playgroud)

所以实际上,我有这些(简化的)模型:

class Product
  has_many :orders
  default_scope :conditions => { :deleted_at => nil }
end

class Order
  belongs_to :product
end
Run Code Online (Sandbox Code Playgroud)

我想要实现的是在访问订单时立即加载产品:

Order.includes(:product)
Run Code Online (Sandbox Code Playgroud)

这(来自如何在 Rails3 中的关联关系上使用无作用域?)在这里不起作用:

Product.unscoped { Order.includes(:product) }
Run Code Online (Sandbox Code Playgroud)

我知道我可以创建自定义belongs_to关系来添加条件(如“渴望加载嵌套关联和作用域”),但我找不到删除现有关系的方法(如果可能的话)。

问题:如何防止将默认范围应用于急切加载查询?

Thi*_*ilo 3

好吧,事实证明,解决方法是强制加入“偏执”模型,从而规避了default_scope

Order.joins(:product).includes(:product)
Run Code Online (Sandbox Code Playgroud)

不漂亮,但它有效。如果可能的话希望有更好的答案。