渴望加载具有偏执狂默认范围的已删除记录

时间:2012-11-11 21:38:55

标签: ruby-on-rails ruby-on-rails-3 eager-loading default-scope

我正在使用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中所述),但我无法找到删除<的方法/ em>现有的,如果可能的话。

问题:如何阻止将默认范围应用于预先加载的查询?

2 个答案:

答案 0 :(得分:2)

嗯,事实证明解决方法是强制加入“偏执”模型,这绕过了default_scope

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

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

答案 1 :(得分:1)