Выпуск Payola: неопределенный метод "сумма" для nil:NilClass

Я только учусь использовать Payola для создания подписок для моего тестового приложения RoR 5.1.5. Я следую инструкциям в вики.

Я установил образец формы, взятый из примера в вики, и поместил его прямо в app / views / subscription / new.html.erb. Когда я ввожу кредитную карту, адрес электронной почты, дату истечения срока действия и нажимаю кнопку "Отправить", я получаю эту ошибку Rails: неопределенный метод "сумма" для nil:NilClass

Я создал SubscriptionPlan в консоли rails и подтвердил, что он существует. Я подтвердил, что новый План появляется на моей панели Stripe после создания его в консоли.

Я уверен, что что-то упустил, и надеюсь, что кто-то столкнулся с такой же проблемой и может указать мне правильное направление. Такое ощущение, что я нигде не уточняю план. Я не уверен, как мне это сделать.

Спасибо за вашу помощь.

Код здесь. приложение / модели / subscription_plan.rb

class SubscriptionPlan < ActiveRecord::Base
  include Payola::Plan
end

/app/controllers/subscriptions_controller.rb

class SubscriptionsController < ApplicationController
  # bring in the `render_payola_status` helper.
  include Payola::StatusBehavior

  def new
    @plan = SubscriptionPlan.first
  end

  def create
    # do any required setup here, including finding or creating the owner object
    owner = current_user # this is just an example for Devise

    # set your plan in the params hash
    params[:plan] = SubscriptionPlan.find_by(id: params[:plan_id])

    # call Payola::CreateSubscription
    subscription = Payola::CreateSubscription.call(params, owner)

    # Render the status json that Payola's javascript expects
    render_payola_status(subscription)
  end
end

/app/views/subscriptions/new.html.erb

 <!-- this header can go in <head> or at the bottom of <body> -->
<%= render 'payola/transactions/stripe_header' %>

<%= form_tag('/subscriptions',
      class: 'payola-onestep-subscription-form',
      'data-payola-base-path' => '/payola',
      'data-payola-plan-type' => @plan.plan_class,
      'data-payola-plan-id' => @plan.id
  ) do |f| %>
  <span class="payola-payment-error"></span>
  Email:<br>
  <input type="email" name="stripeEmail" data-payola="email"></input><br>
  Card Number<br>
  <input type="text" data-stripe="number"></input><br>
  Exp Month<br>
  <input type="text" data-stripe="exp_month"></input><br>
  Exp Year<br>
  <input type="text" data-stripe="exp_year"></input><br>
  CVC<br>
  <input type="text" data-stripe="cvc"></input><br>
  <input type="submit"></input>
<% end %>

/app/config/routes.rb

Rails.application.routes.draw do
  devise_for :users
  root to: "pages#index"
  resources :subscriptions
  get 'pages/index'

  get 'pages/donate'

  mount Payola::Engine => '/payola', as: :payola
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

1 ответ

Решение

В вашем create действие, вы упоминаете SubscriptionPlanэто так

# set your plan in the params hash
params[:plan] = SubscriptionPlan.find_by(id: params[:plan_id])

Из вашей формы в представлении, я не вижу, чтобы вы представили параметр под названием :plan_id, Возможно, опубликуйте свои параметры из файла журнала, чтобы убедиться, что идентификатор плана указан. В противном случае вы должны настроить форму, чтобы включить идентификатор плана. План будет представлен в виде @plan, так что вы можете включить скрытое поле:

<%= hidden_field_tag(:plan_id, @plan.id) %>

Тогда план должен быть найден. Ваш NoMethodError for nil с методом amount указывает на проблему, что plan что amount Метод отправлен, есть nil, (По крайней мере, это мое предположение)

Другие вопросы по тегам