0

Я установил Stripe on Rails и работает как ожидалось.Установка переменной стоимости в шлюзе оплаты полосы на Rails

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

То, что я не могу понять, это как НЕ ТРЕБОВАТЬ код в запрос Stripe и создать метод. Модель курса имеет : стоимость переменной, и я хотел бы установить стоимость, позвонив @ 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

'self.course.cost'? почему '@'? – Antoine

+0

Когда я использую self.course.cost, я получаю эту ошибку: неправильное количество аргументов (1 для 0). – rickb

+0

извините .... это ошибка, которую я получаю: вызывается id для nil, который ошибочно будет 4 - если вы действительно хотите идентификатор nil, используйте object_id – rickb

ответ

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 

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

Смежные вопросы