我一直在研究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行是什麼?
更重要的是,任何人都可以闡明我做錯了什麼在這裏輕一些,或者我可能已經在這個網站錯過任何解決方案?謝謝!!