Rails 3默认范围,范围与覆盖

And*_*rew 7 activerecord named-scope ruby-on-rails default-scope ruby-on-rails-3

我有一种情况,现有应用程序的行为正在发生变化,这让我头疼.

我的应用有照片.照片有一个状态:"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
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.我尝试在lambdas中包装范围方法,但这也不起作用.

我知道default_scope带有行李,但是如果我不能使用覆盖,那么我正在寻找添加scope :complete ...并且必须梳理我现有应用程序中每次调用照片并添加.complete以过滤未处理的照片.

你会如何解决这个问题?

klo*_*ner 6

def self.batch
  Photo.unscoped.where(:status=>"batch")
end
此线程更具权威性: 覆盖Rails default_scope