如何修复此错误“未定义的方法`编码’为nil:NilClassa”并取消订阅计划工作?

这是我第一次使用Stripe和Rails,现在我正在尝试允许高级用户取消订阅。

我可以使用我的代码将用户从标准级别升级到高级别,但是当我尝试将高级用户降级到标准级别时,我遇到了问题。

我遵循了“取消订阅”的Stripe Ruby API参考: https : //stripe.com/docs/api? lang = ruby #cancel_subscription ,但是当我点击“取消订阅”按钮时出现此错误:

NoMethodError – 未定义的方法encoding' for nil:NilClass: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/cgi/util.rb:7:in (1.21 .0)lib / stripe / list_object.rb:19:在retrieve' app/controllers/subscriptions_controller.rb:55:in downgrade’

我的rails版本是4.2.1。

我的代码:

 class SubscriptionsController  e flash[:error] = e.message redirect_to new_subscriptions_path end def downgrade customer = Stripe::Customer.retrieve(current_user.stripe_customer_id) customer.subscriptions.retrieve(current_user.subid).delete downgrade_user_to_standard flash[:success] = "Sorry to see you go." redirect_to user_path(current_user) end end 

ApplitionController:

 class ApplicationController < ActionController::Base def update_user_to_premium current_user.update_attributes(role: "premium") end def downgrade_user_to_standard current_user.update_attributes(role: "standard") end end 

配置/初始化/ stripe.rb:

 Rails.configuration.stripe = { publishable_key: ENV['STRIPE_PUBLISHABLE_KEY'], secret_key: ENV['STRIPE_SECRET_KEY'] } # Set our app-stored secret key with Stripe Stripe.api_key = Rails.configuration.stripe[:secret_key] 

任何帮助将不胜感激!

更新:感谢stacksonstacks的帮助,我需要的是在’current_user.subid = stripe_sub.id’下声明’subscription.user = current_user’,然后在降级方法中使用“subscription = current_user.subscription”调用订阅ID。 现在订阅取消有效!

似乎current_user.subid在这一行返回nil

 customer.subscriptions.retrieve(current_user.subid).delete 

您为current_user分配subid ,但从不保存更改。 您只保存新创建的subscription

 current_user.subid = stripe_sub.id current_user.subscription.save! 

如果你添加current_user.save! 我认为这将解决问题。

希望有所帮助