0

ショッピングカートをデータベースに保存していてcurrent_cart、アプリケーションヘルパーにメソッドがあります。

 private

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

各カートには_manyline_itemsがあります。顧客がチェックアウトする準備ができると、顧客は...に送られorder/newますが、支払いゲートウェイから注文が正常に返されると、すべて問題ありません。しかし、注文の失敗をテストしていますが、オブジェクトが保存されておらず、railsが再度レンダリングしようとしているcreateため、コントローラーに問題があるようです。支払いが成功したかどうかを確認することすらできていません。数日前にテストしたときに機能していたので、何が問題なのかわかりません。@orderorder#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 %>

何が起こっているのかわからない

4

1 に答える 1

0

したがって、@cart = current_cart#create コントローラーに追加すると、問題が解決したようです。ActiveMerchant は検証エラーをスローしていましたが、何らかの理由でそれを行ったときに負けていました@cart...以前に ActiveRecord 検証をテストしていたときはそうではなかったので、何が変更されてすべてが台無しになったのかまだよくわかりません上。

于 2011-05-14T01:23:50.883 に答える