2016-06-21 57 views
0

我想正确地将条带费用与控制器中的create方法结合起来。使用创建方法集成条纹付款

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 

问题是正确验证整个表单。除了条纹领域,我也有专为@individual_training设计的领域。当Stripe没有任何错误,但@individual_training具有条带化注册付款时。我想在@ individual_training.save为真时反过来记录条纹费用。

如果数据在第一部分(条带字段)和表单的第二部分(@individual_training字段)中正确,那么应该注册一个付款并且@ individual_training.save。

我希望能够清楚地解释这个问题。

+0

你需要像Active Record这样的东西有效吗? [方法](http://api.rubyonrails.org/classes/ActiveRecord/Validations.html#method-i-valid-3F) –

+0

@PavelBulanov你的意思是,使用这个:if charge.valid? && individual_training.save –

+0

@PavelBulanov当我使用charge.valid?有错误:未定义的方法为#<条带::电荷:0x007fe8ea4751c8 >>。 –

回答

1

根据你在评论中写道,下面应该做的事情,你

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?的代码应改为条纹操作结果实际检查。

+0

现在看起来它可以正常工作,但是现在我遇到了这个错误的问题:缺少模板后端/ individual_trainings/create。 –

+1

在什么情况下会发生?另外,我在代码中添加了else语句(参见上文),这会在ActiveRecord验证失败的情况下呈现新模板 –

+0

好吧,现在可以使用缺少的模板错误,但个人培训有效时仍然错误,但是由于条带有一些错误,因为individual_training保存到数据库,但不支付。 –