4

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

default_scope :conditions => { :deleted_at => nil }

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

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

class Order
  belongs_to :product
end

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

Order.includes(:product)

这(来自How to use unscoped on associated Relations in Rails3?)在这里不起作用:

Product.unscoped { Order.includes(:product) }

我知道我可以创建一个自定义belongs_to关系来添加条件(如在Eager loading nested association and scope 中),但我找不到删除现有条件的方法,如果这可能的话。

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

4

2 回答 2

2

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

Order.joins(:product).includes(:product)

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

于 2012-11-11T22:02:22.120 回答
1

此错误已在 rails >= 4.1.8 中修复。

https://github.com/rails/rails/issues/11036

https://github.com/rails/rails/pull/17360

于 2015-07-23T21:27:15.253 回答