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