2016-01-20 10 views
7

Model macierzysty Zamówienie has_many Sprzedaż. Kiedy chcę zniszczyć porządku, związane sprzedaży powinien również dostać zniszczone, ale zawsze prowadził do błędu, gdy robi tak: podświetlonyRails4: Nie można zmodyfikować hash zamrożonego.

RuntimeError in OrdersController#destroy 
Can't modify frozen hash 

Linia ta get: self.price = mrr * self.quantity.to_f.

Niszczenie wszystkich powiązanych rekordów sprzedaży ręcznie krok po kroku działa bezbłędnie. Po tym, jak sprzedaż nie jest już powiązana, jestem w stanie zniszczyć rekord Orderso.

Model Sprzedaż:

class Sale < ActiveRecord::Base 
    belongs_to :order, inverse_of: :sales 
    validates :order, :product, :product_group, :presence => true 
    before_create :price 

    def price 
    mrr = Warehouse.where(:product => self.product).pluck(:mrr).shift.strip.sub(',', '.').to_f 
    self.price = mrr * self.quantity.to_f 
    end 
end 

Model Zamówienie:

class Order < ActiveRecord::Base 
has_many :sales, dependent: :destroy, inverse_of: :order 
end 

jakieś pomysły? Z góry dziękuję!

Odpowiedz

12

W wierszu, który pobiera podświetlonego należy upewnić się, że sale nie jest zniszczony podczas aktualizowania swojego atrybutu price:

self.price = mrr * quantity.to_f unless destroyed? # notice, no need for self before quantity 
# or 
write_attribute(:price, mrr * quantity.to_f) unless destroyed? 
+0

Dziękuję bardzo! To działa! – CottonEyeJoe

Powiązane problemy