2016-06-21 71 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保存到數據庫,但不支付。 –