Приложение Rails, использующее полосу для платежей: невозможно передать plan_id из приложения на веб-сайт полосы

Я пытаюсь интегрировать полосу в свое приложение. Я слежу за Railscast (#288), но у меня сложилось впечатление, что есть несколько вещей, которые Райан не упоминает явно.

Моя проблема в том, что plan_id в моем приложении не передается в Stripe. Как только я сгенерирую тестовую транзакцию в своем приложении и войду в Stripe, она покажет, что новый клиент с действительной картой был создан, но plan_id не передается. У меня есть планы по настройке полосы. Но поскольку plan_id не представлен, кредитная карта никогда не снимается. Итак, у меня есть клиенты, но нет платежей.

Вот моя подписка/new.html.haml. Мне интересно, нужно ли мне присвоить значение скрытому полю «plan_id».

%p
  = @plan.name 
  = @plan.price

= form_for @subscription do |f|
  - if @subscription.errors.any?
    .error_messages
      %h2
        = pluralize(@subscription.errors.count, "error")
        prohibited this subscription from being saved:
      %ul
        - @subscription.errors.full_messages.each do |msg|
          %li= msg

  = f.hidden_field :plan_id

  = f.hidden_field :stripe_card_token

  .field
    = f.label :email
    = f.text_field :email

  - if @subscription.stripe_card_token
    Credit card has been provided
  - else
    .field
      = label_tag :card_number, "Credit Card Number "
      = text_field_tag :card_number, nil, name: nil
    .field
      = label_tag :card_code, "Security Code on Card (CVV)"
      = text_field_tag :card_code, nil, name: nil
    .field
      = label_tag :card_month, "Card Expiration"
      = select_month nil, {add_month_numbers_true: true}, {name: nil, id: "card_month"}
      = select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"}

  .stripe_error
    %noscript JavaScript is not enabled and is required for this form. First enable it in your web browser settings.
  .actions= f.submit "Subscribe"

Вот мой контроллер подписки. params(:plan_id) передается с помощью строкового запроса.

  def new
    @subscription = Subscription.new
    @plan = Plan.find_by_id(params[:plan_id])
  end

  def create
    @subscription = Subscription.new(params[:subscription])
    if @subscription.save_with_payment
      flash[:success] = "Thank you for subscribing!"
      redirect_to @subscription
      else
        render 'new'
      end
  end

Вот моя модель для subscribe.rb

class Subscription < ActiveRecord::Base

  has_many :users

  belongs_to :plan

  #validates_presence_of :plan_id, :email

  attr_accessible :stripe_card_token, :plan_id, :email
  attr_accessor :stripe_card_token

  def save_with_payment
    if valid?
      customer = Stripe::Customer.create(description:email, plan: plan_id, 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."
  end
end

person Ben Downey    schedule 04.07.2012    source источник


Ответы (1)


В итоге я передал plan_id новому методу, подобному этому.

@subscription = Subscription.new(plan_id: params[:plan_id])

Легкий ответ. Жаль, что я понял это раньше.

person Ben Downey    schedule 04.07.2012