Was bedeutet inverse_of
in Mongoid-Assoziationen? Was kann ich bekommen, wenn ich es benutze, anstatt einfach ohne es zu assoziieren?Was inverse_of bedeutet in Mongoid?
Antwort
In einer einfachen Beziehung können zwei Modelle nur auf eine einzige Weise verknüpft werden, und der Name der Beziehung ist automatisch der Name des Modells, auf das sie sich bezieht. In den meisten Fällen ist das in Ordnung, reicht aber nicht immer aus.
inverse_of
können Sie die Beziehung angeben, auf die Sie sich beziehen. Dies ist hilfreich, wenn Sie benutzerdefinierte Namen für Ihre Beziehungen verwenden möchten. Zum Beispiel:
class User
include Mongoid::Document
has_many :requests, class_name: "Request", inverse_of: :requester
has_many :assignments, class_name: "Request", inverse_of: :worker
end
class Request
include Mongoid::Document
belongs_to :requester, class_name: "User", inverse_of: :requests
belongs_to :worker, class_name: "User", inverse_of: :assignments
end
In diesem Beispiel können Benutzer Tickets anfordern und zugewiesen werden. Um diese zwei unterschiedlichen Beziehungen darzustellen, müssen wir zwei Relationen zu demselben Modell, aber mit unterschiedlichen Namen definieren. Mit Hilfe von inverse_of
kann Mongoid wissen, dass "Anfragen" mit "Anforderer" und "Zuweisungen" mit "Mitarbeiter" gehen. Der Vorteil hier ist zweierlei: Wir können aussagekräftige Namen für unsere Beziehung verwenden, und wir können zwei Modelle in mehrfacher Beziehung zueinander haben. Ausführliche Informationen finden Sie in der Dokumentation Mongoid Relations.
- 1. Was sind die Vor- und Nachteile von mongoid des has_and_belongs_to_many mit der Verwendung von inverse_of
- 2. MongoDB/Mongoid - was bedeutet {: multi => true} bedeuten
- 3. Rails: inverse_of und Assoziierungs Erweiterungen
- 4. Was bedeutet [&] bedeutet in C++
- 5. Mongoid Referenz Einzigartigkeit
- 6. Selbstreferenz in Mongoid ist nicht in beide Richtungen arbeiten
- 7. Was bedeutet "*" in Python?
- 8. Was bedeutet @ in PHP?
- 9. Was bedeutet $$ in Ruby?
- 10. Was bedeutet "~" in Haskell?
- 11. Was bedeutet ".. ::." in C#?
- 12. Was bedeutet # in Mathematica?
- 13. Was bedeutet @@ in Ruby?
- 14. Was bedeutet :: * in C++?
- 15. Was bedeutet [...] in Python?
- 16. Was bedeutet * in SQL?
- 17. Was bedeutet "% &" in Clojure?
- 18. Was bedeutet "**" in ANT?
- 19. Was bedeutet + in CSS?
- 20. Was bedeutet ... in Zahlencode?
- 21. Was bedeutet @() in Powershell?
- 22. Was bedeutet in Isabelle?
- 23. Was bedeutet/*! */In C#?
- 24. Was bedeutet = in PHP?
- 25. Was bedeutet '\' in Perl?
- 26. Was bedeutet $() in Scala?
- 27. Was bedeutet # = in Prolog?
- 28. Was bedeutet() in Haskell
- 29. Was bedeutet ": .." in Haskell?
- 30. Was bedeutet/in Ruby?
Also brauche ich nicht '' 'inverse of''', wenn es nur eine Beziehung mit benutzerdefinierten Namen gibt, aber ich brauche im Falle von zwei Beziehungen mit benutzerdefinierten Namen? Ich jetzt, dass in ActiveRecord '' inverse_of''' andere Sache tun. – freemanoid
Ja, für eine einzelne Beziehung mit einem benutzerdefinierten Namen brauchen Sie nur 'class_name' (in Active Record und Mongoid). Wenn "Benutzer" und "Anfragen" auf mehrere Arten zusammenhängen, ist "invers_of" die einzige Möglichkeit, wie Mongoid (und Active Record) wissen könnte, auf welche Sie sich beziehen. – XanderStrike