【问题标题】:Trouble with order controller and active merchant订单控制器和活跃商家出现问题
【发布时间】:2011-08-25 08:19:29
【问题描述】:

我将我的购物车存储在数据库中,并在我的应用程序助手中有一个 current_cart 方法。

 private

    def current_cart 
      Cart.find(session[:cart_id])
    rescue ActiveRecord::RecordNotFound 
      cart = Cart.create 
      session[:cart_id] = cart.id 
      cart
   end

每个购物车都有_many line_items。当客户准备结账时,他们会被发送到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 %>

不知道发生了什么

【问题讨论】:

  • 你能把控制器代码换成新的吗?

标签: ruby-on-rails-3 activemerchant


【解决方案1】:

因此,将@cart = current_cart 添加到#create 控制器似乎已经解决了这个问题。 ActiveMerchant 抛出了一个验证错误,由于某种原因,当它这样做时,它丢失了@cart ...当我测试 ActiveRecord 验证时它没有这样做,所以我仍然不太确定我改变了什么搞砸了一切。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 2011-08-16
    • 2011-08-28
    • 2016-07-31
    • 2011-03-17
    • 2016-01-23
    • 2015-12-20
    • 2012-08-21
    相关资源
    最近更新 更多