我正在使用 Rails 3.0.4 构建一个音乐会门票销售应用程序,主要使用敏捷 Web 开发教程 (http://pragprog.com/titles/rails3/agile-web-development-with-rails) 并尝试将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 的未定义方法 `total_price'”错误。我可以通过添加来解决这个问题
@order = current_cart.build_order(params[:order])
到订单“创建”方法,但这会以某种方式阻止相关订单信息(在本例中为“@order.line_items”)在电子邮件文本中呈现,从而弄乱了“order_received”通知。
“购物车”对象在途中某处被设置为零,但删除
Cart.destroy(session[:cart_id])
从命令“创建”方法不能解决问题。
有人知道这个菜鸟的线索吗?