Ich habe vor kurzem ein Praktikum begonnen. Mein Arbeitgeber verwendet Rubin auf Schienen, und ich stoße häufig auf eine neue Syntax, die ich nachschlagen muss, um sie zu verstehen. Ich habe nach einer guten Erklärung für named_scope gegoogelt, aber was ich bisher gefunden habe, sind hauptsächlich Blog-Posts, die großes Lob dafür geben, eher eine klare Definition oder Einführung.
Was genau heißt named_scope (jetzt einfach scope genannt) in Ruby on Rails?
ruby-on-rails
named-scope
Ziggy
quelle
quelle
Antworten:
Ein Bereich ist eine Teilmenge einer Sammlung. Klingt kompliziert? Ist es nicht. Stell dir das vor:
Sie haben Benutzer. Einige dieser Benutzer haben jetzt Ihren Newsletter abonniert. Sie haben diejenigen markiert, die einen Newsletter erhalten, indem Sie der Benutzerdatenbank ein Feld hinzugefügt haben (user.subscribed_to_newsletter = true). Natürlich möchten Sie manchmal diejenigen Benutzer erhalten, die Ihren Newsletter abonniert haben.
Das können Sie natürlich immer tun:
Anstatt dies immer zu schreiben, könnten Sie jedoch so etwas tun.
Wenn Sie Rails 4 oder höher verwenden , gehen Sie stattdessen folgendermaßen vor:
Auf diese Weise können Sie einfach auf Ihre Abonnenten zugreifen:
Dies ist ein sehr einfaches Beispiel, aber im Allgemeinen können Bereiche sehr leistungsfähige Werkzeuge sein, um Ihre Arbeit zu vereinfachen.
Schauen Sie sich diesen Link an: API-Beschreibung
quelle
scope
Syntax viel sauberer ist, Sie erhalten das gleiche Ergebnis, aber mit nur einer ZeileDer Bereich im aktiven Datensatz ähnelt Klassenmethoden, gibt jedoch das Relation-Objekt zurück. Dies bedeutet, dass Sie einen anderen Bereich oder eine andere Methode zur Abfrage aktiver Datensätze aufrufen können.
Wenn Sie beispielsweise ein Zombie-Modell (Zombietabelle) mit den unten genannten Bereichsmethoden haben,
Und du rufst an
In SQL wird Folgendes übersetzt:
Das obige Beispiel basiert auf der Rails 4-Syntax
quelle
scope :recent, -> { order(created_at: :desc) }
? apidock.com/rails/v4.2.9/ActiveRecord/QueryMethods/orderDer beste Weg, um die Details zu verstehen, ist die API-Dokumentation.
Sie erhalten die vollständigen Details und die Möglichkeiten, wie wir Scopes verwenden können.
API-Dokumentation des Umfangs
quelle
Warum sie benutzen?
Mit dem Gültigkeitsbereich können Sie häufig verwendete Abfragen angeben (dies kann als Verknüpfung für lange oder am häufigsten verwendete Abfragen betrachtet werden), die als Methodenaufrufe für die Zuordnungsobjekte oder -modelle referenziert werden können. Mit diesen Bereichen können Sie alle zuvor behandelten Methoden verwenden, z. B. where, joins und include. Alle Bereichsmethoden geben ein ActiveRecord :: Relation-Objekt zurück, mit dem weitere Methoden (z. B. andere Bereiche) aufgerufen werden können.
Um einen einfachen Bereich zu definieren, verwenden wir die Bereichsmethode innerhalb der Klasse und übergeben die Abfrage, die wir ausführen möchten, wenn dieser Bereich aufgerufen wird:
Dies entspricht genau der Definition einer Klassenmethode, und die von Ihnen verwendete Methode ist eine Frage Ihrer persönlichen Präferenz:
Bitte folgen Sie dem folgenden Link für eine vollständige Beschreibung mit Beispiel. Ich hoffe, dies wird dir helfen.
http://guides.rubyonrails.org/active_record_querying.html
quelle
nil
in einigen Fällen zurück und sind daher unter bestimmten Bedingungen nicht verkettbar.Stellen Sie sich jetzt vor:
Sie könnten diese bestimmten Klassen von Menschen erhalten, indem Sie ein Zielfernrohr verwenden!
Das war doch nicht so schwer, oder?
quelle