将 Stripe 支付与 create 方法集成
Integrate Stripe payments with create method
我想在控制器中将 stripe charges 与我的创建方法正确集成。
def create
@individual_training = IndividualTraining.new(individual_training_params)
Stripe.api_key = ENV['STRIPE_SECRET_KEY']
token = params[:stripeToken]
begin
charge = Stripe::Charge.create(
amount: (@individual_training.training_cost.cost * 100).floor,
currency: 'pln',
card: token
)
rescue Stripe::CardError => e
flash[:danger] = e.message
render :new
end
if @individual_training.save
redirect_to :back, notice: 'Pomyślnie dodano.'
else
render :new
end
end
问题在于正确验证整个表单。除了 Stripe 字段,我还有为 @individual_training 设计的字段。当 Stripe 没有任何错误,但 @individual_training 有错误时,stripe 注册付款。我想在@individual_training.save 为真时记录条纹费用,反之亦然。
如果表格的第一部分(条纹字段)和第二部分(@individual_training 字段)中的数据正确,则应注册付款并@individual_training.save.
希望把问题说清楚
根据您在评论中所写的内容,以下内容应该适合您
def create
@individual_training = IndividualTraining.new(individual_training_params)
..
if @individual_training.valid? # run validation, ensure it's ok, but not yet save
begin
charge = Stripe::Charge.create(..) # if there is exception rescue block is called
...
# unless you modified individual_training following save will be positive
if !charge.errors? && @individual_training.save # save should be true as you checked valid? before
redirect_to :back, notice: 'error'
else
render :new # this is if charge has errors
end
rescue Stripe::CardError => e
flash[:danger] = e.message
render :new
end
else # this happens if individual_training is not valid
render :new
end
end
charge.errors?
的代码应该改为实际检查Stripe操作结果。
我想在控制器中将 stripe charges 与我的创建方法正确集成。
def create
@individual_training = IndividualTraining.new(individual_training_params)
Stripe.api_key = ENV['STRIPE_SECRET_KEY']
token = params[:stripeToken]
begin
charge = Stripe::Charge.create(
amount: (@individual_training.training_cost.cost * 100).floor,
currency: 'pln',
card: token
)
rescue Stripe::CardError => e
flash[:danger] = e.message
render :new
end
if @individual_training.save
redirect_to :back, notice: 'Pomyślnie dodano.'
else
render :new
end
end
问题在于正确验证整个表单。除了 Stripe 字段,我还有为 @individual_training 设计的字段。当 Stripe 没有任何错误,但 @individual_training 有错误时,stripe 注册付款。我想在@individual_training.save 为真时记录条纹费用,反之亦然。
如果表格的第一部分(条纹字段)和第二部分(@individual_training 字段)中的数据正确,则应注册付款并@individual_training.save.
希望把问题说清楚
根据您在评论中所写的内容,以下内容应该适合您
def create
@individual_training = IndividualTraining.new(individual_training_params)
..
if @individual_training.valid? # run validation, ensure it's ok, but not yet save
begin
charge = Stripe::Charge.create(..) # if there is exception rescue block is called
...
# unless you modified individual_training following save will be positive
if !charge.errors? && @individual_training.save # save should be true as you checked valid? before
redirect_to :back, notice: 'error'
else
render :new # this is if charge has errors
end
rescue Stripe::CardError => e
flash[:danger] = e.message
render :new
end
else # this happens if individual_training is not valid
render :new
end
end
charge.errors?
的代码应该改为实际检查Stripe操作结果。