Тъй като съм сравнително нов в rails (и ruby), все още се опитвам да разбера къде всичко се обърка тук. Работя върху количка в уеб магазин. Потребителят получава сесия, където се съхраняват неговите артикули от количката (в този случай line_item.rb).
Проблем: Когато щракна върху артикул, той се добавя към количката чрез метода за количка add_product. Ако щракнете отново върху същия артикул, вместо да добавяте същия артикул два пъти, той трябва просто да ++1 към свойството количество на този артикул. Но когато го щракна втори път, получавам страницата за грешка, която казва:
NoMethodError в LineItemsController#create
undefined method `+' for nil:NilClass
Ето моята количка.rb:
class Cart < ActiveRecord::Base
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
Rails.logger.debug(current_item.quantity)
else
current_item = line_items.build(:product_id => product_id)
end
current_item
end
end
Свойството quantity за line_item е от тип integer. Трябва да можете да добавяте цели числа към него, нали? Ето тук съм объркан в момента.
Ето метода "create" в line_items_controller.rb:
def create
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.add_product(product.id)
@line_item.product = product
respond_to do |format|
if @line_item.save
format.html { redirect_to @line_item.cart,
notice: 'Line item was successfully created.' }
format.json { render json: @line_item,
status: :created, location: @line_item }
else
format.html { render action: "new" }
format.json { render json: @line_item.errors,
status: :unprocessable_entity }
end
end
край
Някакви идеи?
наздраве
NoMethodError in LineItemsController#create
, предполагам, че трябва да е с ред в методаcreate
, а не вCart#add_product
, както споменавате. - person Prakash Murthy   schedule 13.01.2013add_product' app/controllers/line_items_controller.rb:45:in
create' Гледам го, но не мога да разбера какво не е наред. @ctilley79 Мислех, че този метод е част от методите за намиране на рамката на релсите. Може ли някой да потвърди това? - person Majoren   schedule 13.01.2013