Mam dwa modele z jednym do wielu skojarzeń. Chcę ustawić wartość domyślną na modelu podrzędnym podczas inicjalizacji na podstawie pewnego stanu nadrzędnego. Obejmuje to wywołanie po wywołaniu wywołania zwrotnego after_initialize dla dziecka, które musi uzyskać dostęp do rodzica poprzez powiązanie belongs_to. Problem polega na tym, że podczas tworzenia wystąpienia dziecka za pomocą metody kompilacji powiązanie z elementem nadrzędnym jest zerowe w wywołaniu zwrotnym after_initialize. Czy to oczekiwane zachowanie? Jestem na szynach 3.0.6Asocjacja Railsów w after_initialize
przykładem zabawki:
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
A w kontrolerze:
product = merchant.products.build
w wywołaniu set_default_value, kupiec jest zerowa, choć wydaje się, że powinnam nie bądź.
Czy oryginalna instancja kupiec zostały jeszcze zapisane, zanim zadzwonisz kupca. products.build? – Pasted
Tak, sprzedawca byłby istniejącym rekordem w bazie danych, więc miałby prawidłowy identyfikator. – Dino
Próbowałem prawie dokładnie, jak masz to i pracował dla mnie. Jedyną różnicą jest to, że 'Produkty klasy' powinny być 'produktem klasy 'bez' s'. –