Con Rails 4, Model.scoped está en desuso pero Model.all no puede reemplazarlo

Rieles de arranque 4,Model.scoped ahora está en desuso.

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

Pero, hay una diferencia enModel.scoped yModel.all, es decir,scoped.scoped devuelve un alcance, mientrasall.all ejecuta la consulta.

En los carriles 3:

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

En los carriles 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

Hay casos de uso en bibliotecas / preocupaciones que devuelvescoped cuando hay un condicional para hacer algo o nada, así:

module AmongConcern
  extend ActiveSupport::Concern

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

      where(id: ids)
    end
  end
end

Si tu cambias estoscoped aall, te enfrentarías a problemas aleatorios dependiendo de dondeamong Fue utilizado en la cadena de alcance. Por ejemplo,Model.where(some: value).among(ids) ejecutaría la consulta en lugar de devolver un ámbito.

Lo que quiero es un método idempotente enActiveRecord::Relation Eso simplemente devuelve un alcance.

¿Qué debo hacer aquí?

Respuestas a la pregunta(4)

Su respuesta a la pregunta