0

我已经在 Rails 上设置了 Stripe,它按预期工作。

我有三个与订单相关的模型。用户模型、课程模型和订单模型。它们通过 has_many 关联关联。
当用户购买课程时,订单表会使用用户 ID 和课程 ID 进行更新。

我想不通的是如何不将价格硬编码到 Stripe 请求和 Create Method中。课程模型有一个: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
4

1 回答 1

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

这就像我需要的那样工作,但如果其他人有更好的方法,我更愿意接受建议!:)

于 2013-11-11T04:17:07.217 回答