我已经设置了Stripe on Rails,它正如预期的那样工作。
我有三个与订单相关的模型。用户模型,课程模型和订单模型。它们通过has_many关联关联 当用户购买课程时,订单表将使用用户ID和课程ID进行更新。
我无法弄清楚如何不将价格硬编码到Stripe请求和创建方法中。课程模型有一个:cost 变量,我想通过调用@ course.cost来设置成本。我似乎无法让这个工作。
这是我的订单型号:
class Order < ActiveRecord::Base
attr_accessible :stripe_card_token, :course_id, :user_id
attr_accessor :stripe_card_token
# attr_accessible :title, :body
belongs_to :course
belongs_to :user
def save_with_payment
@amount = 500
if valid?
charge = Stripe::Charge.create(amount: @amount, currency: 'usd', card: stripe_card_token)
#self.stripe_customer_token = customer.id
save!
end
rescue Stripe::InvalidRequestError => e
logger.error "Stripe error while creating customer: #{e.message}"
errors.add :base, "There was a problem with your credit card."
false
end
end
我的订单控制器:
class OrdersController < ApplicationController
def new
@order = Order.new
end
def create
@order = Order.new(params[:order])
if @order.save_with_payment
redirect_to @order, :notice => "Thank you for your purchase! Enjoy your Class!"
else
render :new
end
end
end
答案 0 :(得分:0)
如果有其他人遇到它,我会发布答案。
在订单控制器中:
def save_with_payment
@amount = self.course.cost
if valid?
charge = Stripe::Charge.create(amount: @amount, currency: 'usd', card: stripe_card_token)
#self.stripe_customer_token = customer.id
save!
end
我遗漏的部分正确地将资源嵌套在routes.rb中:
resources :courses do
resources :orders
end
最后在我的控制器中:
def new
@course = Course.find(params[:course_id])
@order = @course.orders.new
end
这就像我需要它一样,但如果其他人有更好的方法,我会更开心地接受建议! :)