Ich versuche meinen Kopf herumzukriegen inverse_of
und ich verstehe es nicht.
Wie sieht die generierte SQL aus, wenn überhaupt?
Hat die inverse_of
zeigen Option das gleiche Verhalten verwendet , wenn sie mit :has_many
, :belongs_to
und :has_many_and_belongs_to
?
Entschuldigung, wenn dies eine so grundlegende Frage ist.
Ich habe dieses Beispiel gesehen:
class Player < ActiveRecord::Base
has_many :cards, :inverse_of => :player
end
class Card < ActiveRecord::Base
belongs_to :player, :inverse_of => :cards
end
quelle
Ich denke, es
:inverse_of
ist am nützlichsten, wenn Sie mit Assoziationen arbeiten, die noch nicht bestehen. Z.B:Nun in der Konsole:
Ohne die
:inverse_of
Argumentet.project
würde zurückgegebennil
, da es eine SQL-Abfrage auslöst und die Daten noch nicht gespeichert sind. Mit den:inverse_of
Argumenten werden die Daten aus dem Speicher abgerufen.quelle
:inverse_of
ein Problem für mich beim Erstellen neuer übergeordneter und untergeordneter Entitäten in derselben Form gelöst.Nach diesem PR ( https://github.com/rails/rails/pull/9522 ) ist inverse_of in den meisten Fällen nicht erforderlich.
Active Record unterstützt die automatische Identifizierung für die meisten Zuordnungen mit Standardnamen. Active Record erkennt jedoch nicht automatisch bidirektionale Zuordnungen, die einen Bereich oder eine der folgenden Optionen enthalten:
Im obigen Beispiel wird ein Verweis auf dasselbe Objekt in der Variablen
a
und im Attribut gespeichertwriter
.quelle
inverse_of
oder nicht, das Ergebnis füra.first_name == b.author.first_name
ist immer sicher.Nur ein Update für alle - wir haben es nur
inverse_of
mit einer unserer Apps mit einerhas_many :through
Assoziation verwendetGrundsätzlich stellt es das "Ursprungs" -Objekt dem "untergeordneten" Objekt zur Verfügung
Wenn Sie also das Beispiel von Rails verwenden:
Mit
:inverse_of
können Sie auf das Datenobjekt zugreifen, von dem es umgekehrt ist, ohne weitere SQL-Abfragen ausführen zu müssenquelle
Wenn wir zwei Modelle mit has_many und Zugehörigkeit zu Beziehung haben, ist es immer besser, inverse_of zu verwenden, die ActiveRecod darüber informieren, dass sie zur selben Seite der Zuordnung gehören. Wenn also eine Abfrage von einer Seite ausgelöst wird, wird sie zwischengespeichert und aus dem Cache bereitgestellt, wenn sie aus der entgegengesetzten Richtung ausgelöst wird. Was die Leistung verbessert. Ab Rails 4.1 wird inverse_of automatisch festgelegt. Wenn wir den Schlüssel fremd verwenden oder den Klassennamen ändern, müssen wir ihn explizit festlegen.
Bester Artikel für Details und Beispiel.
http://viget.com/extend/exploring-the-inverse-of-option-on-rails-model-associations
quelle
Schauen Sie sich diesen Artikel an !!
http://gsusmonzon.blogspot.com.br/2011/09/rails-power-of-inverseof.html
quelle
Wenn Sie eine
has_many_through
Beziehung zwischen zwei Modellen, Benutzer und Rolle, haben und die Zuordnung des Verbindungsmodells für nicht vorhandene oder ungültige Einträge mit validieren möchtenvalidates_presence of :user_id, :role_id
, ist dies hilfreich. Sie können weiterhin einen User @user mit seiner Zuordnung generieren,@user.role(params[:role_id])
damit das Speichern des Benutzers nicht zu einer fehlgeschlagenen Validierung des Zuweisungsmodells führt.quelle
Bitte werfen Sie einen Blick auf zwei nützliche Ressourcen
Und denken Sie an einige Einschränkungen von
inverse_of
:quelle