Полосатая логика оплаты в рельсах

Я пытаюсь заставить пользователей заполнить форму, а затем заплатить за ее отправку. Как только пользователи платят, мне нужны рельсы, чтобы изменить логическое значение из отдельной модели на истинное.

Вот мой контроллер заряда, точно из документации.

class ChargesController < ApplicationController
def new
end

def create
  # Amount in cents
    @amount = 2900

    customer = Stripe::Customer.create(
      :email => current_user.email,
      :card  => params[:stripeToken]
    )

    charge = Stripe::Charge.create(
      :customer    => current_user.email,
      :amount      => @amount,
      :description => 'OneApp',
      :currency    => 'usd'
    )

  rescue Stripe::CardError => e
    flash[:error] = e.message
    redirect_to charges_path
  end

end 

person Dileet    schedule 02.09.2013    source источник
comment
вы можете использовать обратный вызов after_create и делать то, что хотите   -  person Rajarshi Das    schedule 02.09.2013
comment
Модель Charges отсутствует.   -  person Dileet    schedule 02.09.2013


Ответы (1)


Если вам достаточно создания Stripe::Charge, это так же просто, как получить экземпляр модели, которую вы хотите изменить, в методе create и установить там логическое значение.

Скажем, например, вы хотите установить логическое значение subscribed для текущего пользователя, поэтому в методе создания вы добавляете:

current_user.subscribed = true

или, скажем, вы хотите установить логическое значение paid для экземпляра модели Order, затем в методе создания вы добавляете:

order = Order.find_by_some_way(:some_way => the_value_you_want)
order.paid = true unless order.nil?

Если вам нужно знать, когда деньги действительно были переведены, вы должны спросить Stripe. Есть хорошая жемчужина для интеграции веб-хуков Stripe:

https://github.com/integrallis/stripe_event

В любом случае, если вы пытаетесь узнать, купил ли пользователь что-то или нет, я бы посоветовал дождаться фактического уведомления о переводе, потому что начисление на самом деле не говорит вам, получили ли вы деньги или нет.

person Miotsu    schedule 02.09.2013
comment
Итак, ваше высказывание в параметрах Stripe::Charge имеет что-то вроде @app.boolean = true ?? или только внутри фактического метода создания? - person Dileet; 02.09.2013
comment
У меня нет доступа к current_user в моем контроллере начислений - person Dileet; 03.09.2013
comment
Я просто привел несколько примеров, я могу только догадываться, чего вы пытаетесь достичь и как выглядит ваш проект, в конце концов, это зависит от вас. - person Miotsu; 03.09.2013
comment
Я добавил это в свой метод создания user = User.find(current_user) user.payed = true, но все равно не изменю логическое значение на true в базе данных. - person Dileet; 04.09.2013
comment
просто глупый вопрос: вы тоже делаете user.save? и звучит странно, что нельзя просто сделать current_user.payed = true. к какому классу принадлежит current_user? - person Miotsu; 04.09.2013
comment
@Dileet У меня такая же проблема. Что решило эту проблему для вас? - person amey1908; 19.04.2014