Das Starten von Rails 4 Model.scoped
ist jetzt veraltet.
DEPRECATION WARNING: Model.scoped is deprecated. Please use Model.all instead.
Aber gibt es einen Unterschied in Model.scoped
und Model.all
, das heißt, scoped.scoped
gibt einen Rahmen, während all.all
läuft die Abfrage.
Auf Schienen 3:
> Model.scoped.scoped.is_a?(ActiveRecord::Relation)
=> true
Auf Schienen 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
Es gibt Anwendungsfälle in Bibliotheken / Anliegen, die zurückkehren, scoped
wenn eine Bedingung besteht, etwas oder nichts zu tun, wie zum Beispiel:
module AmongConcern
extend ActiveSupport::Concern
module ClassMethods
def among(ids)
return scoped if ids.blank?
where(id: ids)
end
end
end
Wenn Sie dies ändern scoped
, all
treten zufällige Probleme auf, je nachdem, wo das among
in der Bereichskette verwendet wurde. Zum Beispiel Model.where(some: value).among(ids)
würde die Abfrage ausgeführt, anstatt einen Bereich zurückzugeben.
Was ich will, ist eine idempotente Methode ActiveRecord::Relation
, die einfach einen Bereich zurückgibt.
Was soll ich hier machen?
all
führt die Abfrage aus" nicht nur ein Artefakt der Konsole ist? Die Quelle schlägt vor, dass es gut funktionieren sollte.