Я храню свою корзину в базе данных и имею метод current_cart
в моем помощнике приложения.
private
def current_cart
Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create
session[:cart_id] = cart.id
cart
end
Каждая корзина имеет_много строк_элементов. Когда клиент готов оформить заказ, он отправляется на order/new
... когда заказ успешно возвращается из платежного шлюза, все в порядке. Но я проверяю сбой заказа, и кажется, что есть проблема с моим контроллером create
, потому что объект @order
не сохраняется, а rails снова пытается отобразить order#new
. Это даже не попытка проверить, прошла ли оплата успешно. Я не уверен, что не так, так как он работал, когда я тестировал его несколько дней назад.
def create
@order = current_cart.build_order(params[:order])
@order.ip_address = request.remote_ip
@order.total_tokens = @order.calculate_total_tokens
@order.user_id = current_user
if @order.save
if @order.purchase
render :action => "success"
else
render :action => "failure"
end
else
render :action => "new"
end
end
def new
@cart = current_cart
if @cart.line_items.empty?
redirect_to store_url, :notice => "Your cart is empty."
return
end
@order = Order.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @order }
end
end
Я получаю эту ошибку, когда он пытается отобразить страницу, очевидно, потому что заказ не был сохранен:
NoMethodError in Orders#create
Showing /Users/justin/Code/trackable/app/views/orders/_order_cart.html.erb where line #1 raised:
undefined method `line_items' for nil:NilClass
Extracted source (around line #1):
1: <% unless @cart.line_items.empty? %>
2: <div id="checkout_cart">
3: <% @cart.line_items.each do |l| %>
4: <%= l.quantity %>
Не уверен, что происходит