Итак, поскольку я новичок в рельсах (и в 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
Свойство количества для line_item имеет целочисленный тип. Должна быть возможность добавлять к нему целые числа, верно? Вот где я в замешательстве на данный момент.
Вот метод «создать» в 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 Я думал, что этот метод является частью методов поиска фреймворка rails. Кто-нибудь может это подтвердить? - person Majoren   schedule 13.01.2013