Kann jemand erklären, was diese Methode tut und was kann ich darauf übertragen?Scoped und scope in rails
scoped(options = nil)
Returns an anonymous scope.
Und was auch die Scope-Methode? Ich verstehe es nicht nach dem Lesen der Dokumentation.
Kann jemand erklären, was diese Methode tut und was kann ich darauf übertragen?Scoped und scope in rails
scoped(options = nil)
Returns an anonymous scope.
Und was auch die Scope-Methode? Ich verstehe es nicht nach dem Lesen der Dokumentation.
In Active, alles Abfrage Bauweisen (wie where
, order
, joins
, limit
usw.) liefert einen so Umfang genannt. Nur wenn Sie eine Kicker-Methode wie all
oder first
aufrufen, wird die aufgebaute Abfrage ausgeführt und die Ergebnisse aus der Datenbank zurückgegeben. Die Klassenmethode gibt auch einen Bereich zurück. Der zurückgegebene Bereich ist standardmäßig leer, was bedeutet, dass die Ergebnismenge in keiner Weise eingeschränkt wird, was bedeutet, dass alle Datensätze zurückgegeben würden, wenn die Abfrage ausgeführt wurde. Sie können es verwenden, um eine "leere" Alternative wie in der query_by_date Beispiel von MurifoX bereitzustellen. Oder Sie können es verwenden, um mehrere Bedingungen in einem Methodenaufruf, wie zum Beispiel zu kombinieren:
Model.scoped(:conditions => 'id < 100', :limit => 10, :order => 'title ASC')
# which would be equivalent to
Model.where('id < 100').limit(10).order('title ASC')
Die scope
Klassenmethode können Sie definieren eine Klassenmethode, die auch einen Bereich gibt, wie zum Beispiel:
class Model
scope :colored, lambda {|col|
where(:color => col)
}
end
, die wie folgt verwendet werden kann:
Model.colored
Die nette Sache mit Bereichen ist, dass man sie kombinieren kann (fast) wie Sie wollen, so dass die folgende ist durchaus möglich:
Model.red.where('id < 100').order('title ASC').scoped(:limit => 10)
ich stark auch vorschlagen, das Lesen durch http://guides.rubyonrails.org/active_record_querying.html
Ich habe es in der past.When verwendet machen Sie gekettet Anrufe an die ActiveRecord
Abfrage-Schnittstelle wie folgt aus:
Model.where(:conditions).where(:more_conditions).where(:final_conditions)
Jeder von ihnen ist bereits scoped, ohne Probleme die Kette Arbeit machen. Aber lassen Sie uns sagen, Sie haben etwas wie folgt:
Dies würde einen Fehler verursachen, wenn der Datumsparameter nicht heute oder morgen ist. Es würde den letzten Wert auswählen und versuchen, diese Abfrage mit der nächsten query_by_user
zu ketten, was zu einer undefined method default_scoped? for ''
führt. Aber wenn Sie eine -Methode in der else
-Bedingung setzen, würde es ohne Fehler funktionieren, weil Sie zu ActiveRecord sagen, dass Sie diese Methode/benannten Bereich durchlaufen und keine Aufrufe an where/find/other activerecord methods
gemacht, aber ein Objekt im Bereich zurückgegeben, So können Sie Abfragen und andere Dinge weiter verketten.
Es wäre am Ende so.
else
scoped
end
Ich hoffe, Sie verstehen dieses einfache Beispiel.
Könnten Sie erklären, was es bedeutet, zu sein „scoped“? – LuckyLuke
Es ist wie "sein" ein ActiveRecord-konform. Gekapselt von allen ActiveRecords-Spezifikationen. – MurifoX
Ich bin mir nicht sicher, ob ich "scoped" verstehe, außer dass ich verstehe, was du meinst ... das heißt, ich sehe, dass es sonst scheitern wird. Aber ich verstehe nicht, was das "Scoped" tun kann und ist. – LuckyLuke
Danke severin, es hat geholfen. Woher weiß ich, was ich an .scoped weitergeben kann? Ich sehe: Bedingungen => usw. – LuckyLuke
Sie finden eine vollständige Liste aller Optionen hier: http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find-label-Options – severin
Awesome ! Vielen Dank für Ihre Hilfe – LuckyLuke