Установка переменной стоимости в платежном шлюзе Stripe на Rails

Я настроил Stripe on Rails, и он работает, как и ожидалось.

У меня есть три модели, которые относятся к заказу. Модель пользователя, модель курса и модель заказа. Они связаны с помощью ассоциации has_many.
Когда пользователь покупает курс, таблица заказов обновляется с помощью идентификатора пользователя и идентификатора курса.

Чего я не могу понять, так это как НЕ жестко кодировать цену в запросе 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

person rickb    schedule 08.08.2013    source источник
comment
self.course.cost ? почему @?   -  person Antoine    schedule 09.08.2013
comment
Когда я использую self.course.cost, я получаю эту ошибку: неправильное количество аргументов (1 вместо 0).   -  person rickb    schedule 09.08.2013
comment
извините.... это ошибка, которую я получаю: Called id для nil, который по ошибке будет равен 4 - если вам действительно нужен id nil, используйте object_id   -  person rickb    schedule 09.08.2013


Ответы (1)


Решил, что опубликую ответ на этот вопрос, если кто-то еще столкнется с ним.

В диспетчере заказов:

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

Часть, которую я пропустил, заключалась в правильном вложении ресурса в route.rb:

resources :courses do
 resources :orders
end

И, наконец, в моем контроллере:

def new
    @course = Course.find(params[:course_id])
    @order = @course.orders.new

end

Это работает так, как мне нужно, хотя, если у кого-то есть лучший метод, я более чем открыт для предложений! :)

person rickb    schedule 11.11.2013