0

Rails 3.0.4 を使用してコンサート チケット販売アプリケーションを構築しています。 Ryan Bate の注文購入方法 (http://railscasts.com/episodes/146-paypal-express-checkout)。すべては、orders_controller.rb で次のように機能します。

def create
  @order = Order.new(params[:order])
  @order.add_line_items_from_cart(current_cart)
  @order.ip_address = request.remote_ip 

  respond_to do |format|
    if @order.save
  Notifier.order_received(@order).deliver
  format.html { redirect_to(calendar_url, :notice => 'Thank you for your order.') }
      format.xml  { render :xml => @order, :status => :created, :location => @order }
  Cart.destroy(session[:cart_id])
  session[:cart_id] = nil
else
  format.html { render :action => "new" }
      format.xml  { render :xml => @order.errors, :status => :unprocessable_entity }
end
  end

しかし、「&& @order.purchase」を条件節に追加すると、order.rb モデルは次のようになります。

class Order < ActiveRecord::Base
  #...
  belongs_to :cart
  #...

  def price_in_cents
    (cart.total_price*100).round
  end

  def purchase
    response = GATEWAY.purchase(price_in_cents, credit_card, purchase_options)
    cart.update_attribute(:purchased_at, Time.now) if response.success?
    response.success?
  end
  #...
end

「nil:NilClass の undefined method `total_price'」というエラーが表示されます。追加することでこれを回避できます

@order = current_cart.build_order(params[:order])

注文の「作成」メソッドに追加されますが、これにより、関連する注文情報 (この場合は「@order.line_items」) が電子メール テキストに表示されなくなり、「order_received」通知が台無しになります。

「カート」オブジェクトは途中で nil に設定されていますが、削除しています

Cart.destroy(session[:cart_id])

注文から「作成」メソッドを使用しても問題は解決しません。

誰でもこの初心者の手がかりを得ましたか?

4

1 に答える 1

0

カート オブジェクトが実際に belongs_to リレーションで指定されているようには見えません。これらの行に沿って@order.cart = current_cart、 または、または何かを行う必要があります。current_cart.order = Order.new

于 2011-05-12T23:01:26.507 に答える