【发布时间】:2013-06-13 20:38:16
【问题描述】:
我正在开发一个 Rails 应用程序,它允许使用 Stripe 注册高级会员资格,并且正如人们所期望的那样,可以取消该会员资格。为了取消成员资格,用户单击一个按钮,触发 Promembers_controller.rb 中的destroy 操作。在destroy 内部有一个实例方法cancel_subscription 的调用,它与一些JavaScript 一起通过调用customer.cancel_subscription 来处理Stripe 成员资格的取消。检查我的 Stripe 测试记录,会员资格被取消,但是,似乎 cancel_subscription 方法返回 false,因为这个不成功的重定向一直在运行
redirect_to (:back), :notice => "Not successful. Please try again or contact us."
以及destroy 操作中的其余代码(即在@promember.cancel_subscription(id) 未运行之后。
问题:(这是借来的代码)。 cancel_subscription 方法是否总是返回救援结束时的false(即使没有救援发生),这就是为什么销毁操作的else 子句中的重定向总是被调用?有什么更好的方法来实现我想要做的事情?
Promembers_controller.rb
def destroy
id = current_user.customer_id
@promember = current_user.promember
if @promember.cancel_subscription(id)
session[:pro] = nil
current_user.customer_id = nil #is not getting run
current_user.promember.delete #is not getting run
current_user.last_four_digits = nil #is not getting run
current_user.save
redirect_to lawyer_profile_path(current_user), :notice => "Premium membership has been cancelled."
else
redirect_to (:back), :notice => "Not successful. Please try again or contact us."
end
end
Promember.rb
def cancel_subscription(customer_id)
unless customer_id.nil?
customer = Stripe::Customer.retrieve(customer_id)
unless customer.nil? or customer.respond_to?('deleted')
if customer.subscription.status == 'active'
customer.cancel_subscription
user.remove_role :pro
if user.practices.size > 1
user.practices.delete(user.practices[1])
end
end
end
end
rescue Stripe::StripeError => e
logger.error "Stripe Error: " + e.message
errors.add :base, "Unable to cancel your subscription. #{e.message}."
false
end
【问题讨论】:
标签: ruby-on-rails