Com o Rails 4, o Model.scoped está obsoleto, mas o Model.all não pode substituí-lo

Começando Rails 4,Model.scoped está agora obsoleto.

DEPRECATION WARNING: Model.scoped is deprecated. Please use Model.all instead.

Mas há uma diferençaModel.scoped eModel.all, isso é,scoped.scoped retorna um escopo, enquantoall.all executa a consulta.

Nos trilhos 3:

> Model.scoped.scoped.is_a?(ActiveRecord::Relation)
=> true

Nos trilhos 4:

> Model.all.all.is_a?(ActiveRecord::Relation)
DEPRECATION WARNING: Relation#all is deprecated. If you want to eager-load a relation, you can call #load (e.g. `Post.where(published: true).load`). If you want to get an array of records from a relation, you can call #to_a (e.g. `Post.where(published: true).to_a`).
=> false

Existem casos de uso em bibliotecas / preocupações que retornamscoped quando há uma condicional para fazer algo ou nada, assim:

module AmongConcern
  extend ActiveSupport::Concern

  module ClassMethods
    def among(ids)
      return scoped if ids.blank?

      where(id: ids)
    end
  end
end

Se você mudasse issoscoped paraall, você enfrentaria problemas aleatórios dependendo de ondeamong foi usado na cadeia do escopo. Por exemplo,Model.where(some: value).among(ids) executaria a consulta em vez de retornar um escopo.

O que eu quero é um método idempotente emActiveRecord::Relation que simplesmente retorna um escopo.

O que devo fazer aqui?