Полоса - действие при зарядке выполнено

Я только начал использовать Stripe и следовал их руководству по настройке оформления заказа с помощью Rails

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

В моей модели событий у меня есть метод make_premium:

  def make_premium
    self.update_attribute(:premium_event, true)
  end 

Действие обновления моего event_controller основано на примере создания Stripe, за исключением того, что я добавил блок repond_to, чтобы вернуть пользователей к обновленному событию, а также вызвать метод make_premium.

  def upgrade
    @event = Event.find_by_slug(params[:id])
    # Amount in pence
    @amount = 299

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

    charge = Stripe::Charge.create(
      :customer    => customer.id,
      :amount      => @amount,
      :description => 'Premium Event Upgrade',
      :currency    => 'gbp',
      :metadata => {'event_id' => @event.id, 'event_headline' => @event.headline}
    )

    respond_to do |format|
       format.html { redirect_to @event, :notice => 'Event was successfully upgraded.' }
       @event.make_premium
    end

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to event_path(@event)
  end

Что я хочу знать: а) можно ли использовать здесь ответ на блок, учитывая последующее спасение, и б) можно ли вызвать мой метод make_premium из этого блока?

Я поигрался с использованием веб-перехватчиков Stripe, и, хотя перехватчик charge.suceeded работает хорошо, кажется, что это дополнительный шаг, которого я мог бы избежать, если описанного выше достаточно.

Мы будем благодарны за любую информацию от людей, более опытных с Stripe.


person Raoot    schedule 13.11.2013    source источник


Ответы (1)


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

Единственное возможное изменение, которое я бы предложил, - это добавить проверку, чтобы убедиться, что атрибут обновлен успешно.

def upgrade
    @event = Event.find_by_slug(params[:id])
    # Amount in pence
    @amount = 299

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

    charge = Stripe::Charge.create(
      :customer    => customer.id,
      :amount      => @amount,
      :description => 'Premium Event Upgrade',
      :currency    => 'gbp',
      :metadata => {'event_id' => @event.id, 'event_headline' => @event.headline}
    )

    respond_to do |format|
       if @event.make_premium
         format.html { redirect_to @event, :notice => 'Event was successfully upgraded.' }
       else
         // handle error and redirect
       end
    end

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to event_path(@event)
  end
person Catfish    schedule 13.11.2013
comment
Хорошо, отлично, в этом есть смысл. Я добавлю это. Спасибо - person Raoot; 13.11.2013