我有一种情况,现有应用程序的行为正在发生变化,这让我很头疼。
我的应用程序有照片。照片有一个状态:"batch", "queue", or "complete"
。应用程序中的所有现有照片都是“完整的”。
99% 的时间我只需要显示完整的照片,并且在所有现有的代码库中,我需要对照片的每次调用都限制为仅显示完整的照片。
但是,在与上传和分类照片相关的屏幕中,我需要能够相当轻松地覆盖默认范围以显示批处理或排队的照片。
像许多其他人一样,我需要找到一种在某些情况下轻松覆盖默认范围的方法。我查看了这些问题(1、2),但它们似乎没有回答我正在寻找的内容。
我希望工作的代码是这样的:
class Photo < ActiveRecord::Base
...
default_scope where(:status=>'complete')
scope :batch, unscoped.where(:status=>'batch')
scope :queue, unscoped.where(:status=>'queue')
...
end
但是,这是行不通的。我尝试将范围方法包装在 lambdas 中,但这也不起作用。
我意识到 default_scope 带有包袱,但如果我不能将它与覆盖一起使用,那么我正在考虑添加scope :complete ...
并不得不梳理我现有应用程序中对照片的每次调用并添加.complete
以过滤未处理的照片。
你将如何解决这个问题?