Проблема с контроллером заказов и активным продавцом

Я храню свою корзину в базе данных и имею метод 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 %>

Не уверен, что происходит


person Slick23    schedule 14.05.2011    source источник
comment
Может тебе код контроллера на новый?   -  person Bryan Drewery    schedule 14.05.2011


Ответы (1)


Таким образом, добавление @cart = current_cart в контроллер #create, похоже, решило проблему. ActiveMerchant выдавал ошибку проверки, и по какой-то причине, когда он это делал, он терял @cart ... он не делал этого раньше, когда я тестировал проверки ActiveRecord, поэтому я до сих пор не совсем уверен, что я изменил, что облажался все вверх.

person Slick23    schedule 14.05.2011