Das Starten von Rails 4 Model.scopedist jetzt veraltet.
DEPRECATION WARNING: Model.scoped is deprecated. Please use Model.all instead.
Aber gibt es einen Unterschied in Model.scopedund Model.all, das heißt, scoped.scopedgibt einen Rahmen, während all.alllä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, scopedwenn 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, alltreten zufällige Probleme auf, je nachdem, wo das amongin 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?
allführt die Abfrage aus" nicht nur ein Artefakt der Konsole ist? Die Quelle schlägt vor, dass es gut funktionieren sollte.