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])
注文から「作成」メソッドを使用しても問題は解決しません。
誰でもこの初心者の手がかりを得ましたか?