2017-02-15 4 views
-3
current_item = line_items.find_by(product_id: product_id) 
    if current_item 
     current_item.quantity += 1 
    else 
     current_item = line_items.build(product_id: product_id) 
    end 

ich einen Fehler (3.) Linie bekam, sagt er ** undefined Methode` +' für nil: NilClass Ich habe keine Ahnung Was ist los: | **nicht definierte Methode `+ 'für nil: NilClass (current_item.quantity + = 1)

class Cart < ApplicationRecord 

has_many :line_items, dependent: :destroy 


def add_product(product_id) 
    current_item = line_items.find_by(product_id: product_id) 
    if current_item 
    current_item.quantity += 1 
    else 
    current_item = line_items.build(product_id: product_id) 
    end 
    current_item 
end 

**And my line_controller** 

def create 
    product = Product.find(params[:product_id]) 
    @line_item = @cart.add_product(product.id) 
    respond_to do |format| 
    if @line_item.save 
     format.html { redirect_to @line_item.cart, notice: 'Line item was successfully created.' } 
     format.json { render :show, status: :created, location: @line_item } 
    else 
     format.html { render :new } 
     format.json { render json: @line_item.errors, status: :unprocessable_entity } 
    end 
    end 
end 


def change 
    add_column :line_items, :quantity, :integer, default: 1 
end 
+2

"Ich habe keine Ahnung, was los ist" - der Fehler sagt Ihnen. 'current_item.quantity' ist null. –

Antwort

-1

Was genau wollen Sie mit der Menge überprüfen? wenn es größer als 1 ist? Ich bin mir nicht sicher, ob Ihr Operator so funktioniert, weil A + = B A = A + B ist. Da Sie jedoch einen Null-Klassenfehler erhalten, scheint der aktuelle_Eintrag gleich Null zu sein. Bitte vergewissere dich, dass das current_item von Rails gefunden wird. Oder die Menge ist Null. Ich habe gesehen, dass @Iceman deine Frage bereits beantwortet hat.

Übergeben Sie product_id in params und stellen Sie sicher, dass Sie einen find_by (: product_id) in Ihrem Controller haben. Wenn du das current_item bekommst und es nicht Null ist, musst du nur prüfen, ob die Menge gleich null ist. Wenn einige Mengen gleich Null sind, können Sie den Fehler mit und if loop umgehen. z.B. wenn nil nichts anderes usw. tut

0

Sie sollten byebug verwenden, um sicherzustellen, dass quantity vorhanden ist. Ich kann diese Lösung

current_item = line_items.find_by(product_id: product_id) 

if current_item.present? 
    current_item.quantity += 1 unless current_item.quantity.nil? 
else 
    current_item = line_items.build(product_id: product_id) 
end 
current_item 
0

Statt current_item.quantity += 1 =>current_item.increment(:quantity) vorschlagen und jetzt funktioniert es.

Verwandte Themen