2015-06-08 82 views
0

我一直在研究Rails購物車應用程序,並注意到Stripe API中的示例代碼在每次放置(測試)訂單時創建一個新客戶。創建條帶事務而不重新創建用戶

這顯然是不可取的,作爲Ruby/Rails的新手,我一直在搜索SO和每一個可以找到的教程,以瞭解如何在創建它之前檢查客戶是否存在。標準的做法似乎是檢查stripe_customer_token,然後根據是否存在。但是,無論我如何接近它,我都會爲customer_token得到一個NoMethodError。

這是我目前charges_controller.rb:

class ChargesController < ApplicationController 
    def new 
    end 

    def create 
    if self.customer_token.present? 
    @customer = Stripe::Customer.retrieve(current_user.stripe_customer_token) 
    else 
    @customer = Stripe::Customer.create(
     :email => self.manager.email, card => stripe_token 
    ) 
     charge = Stripe::Charge.create(
     :amount => (params[:amount].to_f * 100).abs.to_i, 
     currency => "usd", 
     card => params[:stripeToken], 
     description => params[:email] 
    ) 
     @amount = params[:amount] 
     @payment_id = charge.id 
    end 
    end 
end 

我從服務器得到的是:

Started POST "/charges" for 50.184.82.198 at 2015-06-08 21:26:57 +0000 
Processing by ChargesController#create as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"BLAHBLAHBLAH", "stripeToken"=>"BLAHBLAH", "stripeTokenType"=>"card", "stripeEmail"=>"[email protected]"} 
Completed 500 Internal Server Error in 7ms 

NoMethodError (undefined method `customer_token' for #<ChargesController:0x007fa788783638>): 
app/controllers/charges_controller.rb:48:in `create' 

線48和49:

if self.customer_token.present? 
@customer = Stripe::Customer.retrieve(current_user.stripe_customer_token) 

(行數字是如此之高,因爲上面有一些註釋掉的代碼,我嘗試了不同的東西)

奇怪的是(對我的新手而言)是它在stripe_customer_token中折衷出來,但是如果我將stripe_customer_token更改爲customer_token,它會在它之前的行處出現 - 在self.customer_token處。當然,如果這是一個問題,它應該在那裏放出去,無論49行是什麼?

更重要的是,任何人都可以闡明我做錯了什麼在這裏輕一些,或者我可能已經在這個網站錯過任何解決方案?謝謝!!

回答

0

我認爲這個問題是,你從控制器請求customer_token,而不是從CURRENT_USER。是stripe_customer_token存儲在用戶身上的東西?你想在檢索客戶之前檢查它是否存在?如果是這樣的......

變化:

if self.customer_token.present? 

到:

if current_user.stripe_customer_token.present?