Ich habe zwei Modelle mit einer eins zu viele Assoziation. Ich möchte einen Standardwert für das untergeordnete Modell bei der Initialisierung basierend auf einem bestimmten Status des übergeordneten Elements festlegen. Dies beinhaltet ein Callback nach dem Initialisieren von Callbacks auf das Kind, das über die assignes_to-Assoziation auf das Elternobjekt zugreifen muss. Das Problem besteht darin, dass bei der Instanziierung des untergeordneten Elements mit der build -Methode die Zuordnung zum übergeordneten Element im after_initialize-Callback gleich Null ist. Ist das erwartetes Verhalten? Ich bin auf Schienen 3.0.6Rails association nil in after_initialize
Ein Spielzeug Beispiel:
class Merchant < ActiveRecord::Base
has_many :products
end
class Product < ActiveRecord::Base
belongs_to :merchant
after_initialize :set_default_value
def set_default_value
if merchant.state
self.foo = some_value
else
self.foo = some_other_value
end
end
end
Und in einem Controller:
product = merchant.products.build
In dem Aufruf von set_default_value, Händler ist gleich Null, obwohl es scheint, dass es shouldn nicht sein.
Hat der ursprüngliche Kaufmann Instanz noch gespeichert, bevor Sie Händler nennen. products.build? – Pasted
Ja, der Händler wäre ein existierender Datensatz in der Datenbank, also hätte er eine gültige ID. – Dino
Ich habe es fast genau versucht, wie du es hast und es hat für mich funktioniert. Der einzige Unterschied ist, dass "Klassenprodukte" ohne "s" "Produktklasse" sein sollten. –