我正在开发一款应用程序,允许会员升级到高级会员资格(使用Stripe付款后)以访问其他功能。我只在生产中使用Stripe在测试模式,因此我正在寻找一种在Heroku控制台中创建高级用户的方法。它会是这样的吗?:
user = User.find_by(name:’existing user name’)
user.update_attribute(‘premium’).save
我的schema.rb文件中有t.boolean "premium"
。
我是编程新手,所以如果您需要任何其他文件信息,请告诉我。谢谢!
编辑更新:这是我的收费控制器代码:
class ChargesController < ApplicationController
def new
@stripe_btn_data = {
key: "#{ Rails.configuration.stripe[:publishable_key] }",
description: 'Premium Membership',
amount: 1_299
}
end
def create
@amount = params[:amount]
customer = Stripe::Customer.create(
email: current_user.email,
card: params[:stripeToken]
)
charge = Stripe::Charge.create(
customer: customer.id,
amount: @amount,
description: 'Premium Membership',
currency: 'usd'
)
current_user.update_attribute(:premium, true)
redirect_to wikis_path, flash: { notice: "Congratulations, #{current_user.email}, on becoming a premium member!"}
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to new_charge_path
end
end
答案 0 :(得分:2)
我假设您在控制器中调用了一个创建新条纹费用的方法,如下所示:
@user.update_with_payment
在用户模型中的该方法中,您应该调用Stripe API来根据用户的条带令牌向用户收费。您可以做的是为该方法设置条件,以便在收费成功时更新用户以使其premium属性为true。如果收费不成功,您将重新呈现付款表单并显示任何适用的错误。
if @user.update_with_payment
@user.update_attribute(:premium, true)
# You can than redirect wherever you want
redirect_to @user
else
render :new
end
以这种方式设置控制器将使Stripe测试模式下的用户能够在其对象上接收premium属性,因为测试模式将像实时模式一样运行此方法。在为Stripe设置方法和逻辑时,将所有逻辑放入Rails应用程序中,测试模式将按预期实时模式的方式工作。不要在控制台中更新用户对象。