Ich habe zwei Modelle:Rails Assoziation Rückruf mit zwischengespeicherten Abfrage
class Basket < ActiveRecord::Base
has_many :products
def recalculate_price!
price = products.map(&:price).sum
save
end
end
class Product < ActiveRecord::Base
belongs_to :basket
after_save :update_basket
def update_basket
basket.recalculate_price!
end
end
und als ich es so nennen:
basket = Basket.new
basket.products.build(price)
basket.save
Das Problem: basket.price
nicht aktualisieren.
Ich habe das Problem untersucht und herausgefunden, dass es eine Art Caching in update_basket
Methode gibt. Das Problem konnte mit reload
vor basket.recalculate_price!
gelöst werden.
Gibt es eine Option, die update_basket
Methode unberührt zu lassen? Ich habe viele solcher Fälle in meiner Bewerbung.
Ich würde gerne verstehen, wie es funktioniert und ähnliche Probleme in der Zukunft vermeiden.
Hinweis: Ich habe kürzlich Schienen von 3.2 auf 4.2 aktualisiert. In einer früheren Version hat alles gut funktioniert.
Sie haben das Hauptproblem nicht angesprochen: warum 'basket.price' nicht aktualisiert und wie man es beheben – d3m0n