0

Stripe on Rails をセットアップしましたが、期待どおりに動作しています。

注文に関連する 3 つのモデルがあります。User モデル、Course モデル、および Order モデル。それらは、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 に答える