2016-11-28 2 views
0

Wenn ich versuche, line_item zu erstellen, erhalte ich diesen Fehler: ActiveRecord :: RecordNotSaved (Sie können create nicht aufrufen, wenn das übergeordnete Element nicht gespeichert wird).Schienen. Eltern speichern, bevor Kind speichern

Wenn ich falsch liege? Wie repariere es?

LINE_ITEMS Controller

def create 
    @product = Product.find_by_id(params[:line_item][:product_id]) 
    @cart = current_cart 
    @line_item = @cart.add_product(line_item_params) 
end 

Wagen Modell

has_many :line_items, dependent: :destroy 

def add_product(line_item_args) 
    current_line_item.quantity += line_item_args[:quantity].to_i 
    current_line_item.save 

    if current_item 
    current_item.quantity += line_item.quantity.to_i 
    else 
    current_item = line_items.create!(line_item_args) 
    end 
    current_item 
end 

UPD

Arbeitshilfsmethode current_cart von Anwendungssteuerung. Problem war drin.

def current_cart 
    Cart.find(session[:cart_id]) 
rescue ActiveRecord::RecordNotFound 
    cart = Cart.create 
    session[:cart_id] = cart.id 
    cart 
end 
+0

Speichern/zuerst Einkaufswagen erstellen?!? – Fallenhero

+0

Ich versuche hinzufügen nach_save: add_product im Warenkorb Modell, aber der Fehler ist weiterhin – alexin

+1

after_save: add_product wird das nicht beheben. Wahrscheinlich wird @cart nicht beibehalten. Sie müssen den Warenkorb erstellen/speichern, bevor Sie Assoziationen erstellen. – lightalloy

Antwort

0

ich weiß nicht, wie Sie mit dem Wagen arbeiten, aber ich bin sicher, dass amoust aktuelle Warenkorb nicht auf de Datenbank persited, überprüfen ihre falls dies wahr ist.

+0

Problem war in meiner Hilfsmethode current_cart. danke für die Hilfe. – alexin

Verwandte Themen