gpt4 book ai didi

ruby-on-rails - Payola 问题 : undefined method `amount' for nil:NilClass

转载 作者:行者123 更新时间:2023-12-04 03:40:14 27 4
gpt4 key购买 nike

我刚刚学习如何使用 Payola 为我的 RoR 5.1.5 测试应用程序创建订阅。我正在按照 wiki 上的说明进行操作。

我已经设置了取自 Wiki 示例的示例表单,并将其直接放入 app/views/subscriptions/new.html.erb 中。当我输入信用卡、电子邮件、到期日期并单击提交时,我收到此 Rails 错误:nil:NilClass 的未定义方法“金额”

我已经在 Rails 控制台中创建了 SubscriptionPlan 并确认它存在。我已确认新计划在控制台中创建后会显示在我的 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

最佳答案

在您的create 操作中,您像这样提到SubscriptionPlan 的ID

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

从 View 中的表单中,我看不到您将提交名为 :plan_id 的参数。也许从日志文件中发布您的参数,以确保计划的 ID 在那里。否则,您必须调整表单以包含计划的 ID。该计划将以 @plan 的形式出现,因此您可以包含一个隐藏字段:

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

然后应该找到计划。您的 NoMethodError for nil 方法 amount 指向问题,plan amount 方法被发送到,是 nil。 (至少这是我的猜测)

关于ruby-on-rails - Payola 问题 : undefined method `amount' for nil:NilClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49389223/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com