Ruby on rails 在Rails上的条带支付网关中设置可变成本

Ruby on rails 在Rails上的条带支付网关中设置可变成本,ruby-on-rails,activerecord,model-associations,stripe-payments,Ruby On Rails,Activerecord,Model Associations,Stripe Payments,我已经在Rails上设置了Stripe,它正在按预期工作 我有三种型号与订单有关。用户模型、课程模型和订单模型。它们通过多个关联关联关联。 当用户购买课程时,将使用用户ID和课程ID更新订单表 我无法理解的是如何不将价格硬编码到条带请求中并创建方法。课程模型有一个:cost变量,我想通过调用@course.cost设置成本。我好像没办法让它工作 这是我的订单型号: class Order < ActiveRecord::Base attr_accessible :stripe_ca

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

我有三种型号与订单有关。用户模型、课程模型和订单模型。它们通过多个关联关联关联。
当用户购买课程时,将使用用户ID和课程ID更新订单表

我无法理解的是如何不将价格硬编码到条带请求中并创建方法。课程模型有一个: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
类顺序e
logger.error“创建客户时出现条带错误:#{e.message}”
errors.add:base,“您的信用卡有问题。”
假的
结束
结束
我的订单管理员:

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
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
def new
    @course = Course.find(params[:course_id])
    @order = @course.orders.new

end
class OrdersController“谢谢您的购买!祝您上课愉快!”
其他的
渲染:新
结束
结束
结束

我想如果有人遇到这个问题,我会把答案贴出来

在订单控制器中:

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
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
def new
    @course = Course.find(params[:course_id])
    @order = @course.orders.new

end
我遗漏的部分是在routes.rb中正确嵌套资源:

resources :courses do
 resources :orders
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
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
def new
    @course = Course.find(params[:course_id])
    @order = @course.orders.new

end

这就像我需要它一样有效,不过如果其他人有更好的方法,我更愿意接受建议!)

自身课程成本
?为什么是
@
?当我使用self.course.cost时,我得到了这个错误:参数的数目错误(1代表0)。对不起……这就是我得到的错误:调用了nil的id,它会错误地为4——如果你真的想要nil的id,请使用object\u id