In Rails, wie kann ich abrufen das Objekt auf einem belongs_to Verband, ohne die Datenbank durchlaufen?

StackOverflow https://stackoverflow.com/questions/3152924

Frage

Betrachten Sie die folgende Einstellung:

class Parent < ActiveRecord::Base
  has_many :children
end

class Child < ActiveRecord::Base
  belongs_to :parent
end

Und diese Konsolensitzung:

>> p = Parent.find 41
>> p.some_attr = 'some_value'
>> c = p.children.build
>> c.parent

Durch meine Log-Dateien zu beobachten, kann ich sehen, dass c.parent wird die DB für das übergeordnete Objekt abfragt. Ich möchte stattdessen die vorhandene in-Speicher zuzugreifen Objekt (p), weil ich Zugang müssen die some_attr Wert des übergeordneten, die noch nicht in der Datenbank gespeichert ist. Gibt es eine Möglichkeit, dies zu tun? c.parent (force_reload = false) gefällt mir nicht bekommen es.

War es hilfreich?

Lösung

Sie können verwenden: inverse_of es einzustellen. Lesen Sie mehr darüber hier .

Andere Tipps

Active bemühen sich nicht auf Garantie, dass Objekte im Speicher für die gleichen Datenbankobjekte sind alle gleich. Das ist etwas, dass DataMapper garantiert.

Ich weiß, Ihr Beispiel wahrscheinlich, um vereinfacht Ihre Frage zu stellen, sondern nur von einem naiven Blick auf sie - warum Sie nicht nur p anstelle von c.parent

Ein weiterer möglicherweise hilfreich Vorschlag, speichern Sie das Update auf Elternteil auf den db:

p = Parent.find 41

# do this...
p.some_attr = 'some_value'
p.save

# OR this...
p.update_attribute(:some_attr, 'some_value')

c = p.children.build
c.parent

Ich bin mir nicht sicher, ob c.parent(false) ( „nicht aus dem db reload“) wird der Trick hier tun, da es sich um ein frisches Kind-Objekt ist. Aber man kann das auch versuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top