2015-11-26 41 views
0

我在我的應用程序中使用條紋結帳。我想這樣做是爲了當訪客用戶想要購買一件商品時,他們被要求創建一個賬戶。一旦賬戶被創建,他們將被收費併爲他們創建收據。軌,條紋,當張貼到收費控制器

對於非來賓用戶,我的條紋付款運行正是我想要的方式。我想要做的是在我的用戶控制器的創建操作中創建了用戶後,將其實質上發佈到我的收費控制器的創建操作中,以便在創建其帳戶時自動進行收費。

但是看完周圍似乎控制器之間的發佈是一個非常不軌的事。所以我不確定我該怎麼做,以便它與MVC模式合作。在我看來,訪客用戶已經點擊購買機票,所以只有有意義的是,他們不應該再次點擊去做。

我不能看到一個整潔的方式做到這一點不復制從我的收費代碼的負載控制器的創建行動統一到我的用戶控制器創建行動 - 但似乎是荒謬的。有沒有更好的方法來做到這一點?

回答

1

我建議將充電動作放入其自己的模型中,例如PaymentCharge,這將允許您通過傳遞必要的參數來調用動作。例如

class Payment < ActiveRecord::Base 

    def self.charge(amount, token) 
     charge = Stripe::Charge.create({ 
      :amount => amount * 100,  # Amount is based in cents 
      :source => token, # Could be existing credit card token or JS Stripe token 
      :currency => "usd", 
      :description => "Test Charge" 
     }) 
    end 
end 

所以從任何控制器,那麼你可以調用它是這樣:

class UsersController < ApplicationController 
    def create 
     user = User.new(user_params) 

     if user.save 
      add_to_flash = "" 

      # You could do another conditional here to check if the card should be processed 
      if params[:card_should_charged] 
       Payment.charge("1200", "tok_8asdfa9823r23") #=> $12.00 and the charge token 
       add_to_flash = " and your payment was accepted" 
      end 

      flash[:notice] = "Your account was created" + add_to_flash + "." 
      redirect_to whatever_path 
     else 
      flash[:error] = "Failed to create user." 
      render :new 
     end 
    end 
end 

你會明顯地要創造條件自己,最有可能在視圖中,並通過在用戶時創建表單被提交。

如果你需要生成Payment模型沒有一個表(櫃面你只是想利用該模型來處理付款,而不是存儲它們),那麼你可以使用:

rails g model Payment --no-migration 

生成它。

+0

這太神奇了!非常感謝。這是一個很好的通用方法。 – Dennis

+0

我可以問一個快速相關的問題讓我放心嗎?目前,我傳遞的參數的負載,以註冊表單視圖 - 的URL看起來像「HTTP://本地主機:3000 /註冊額= 75306&電子郵件=電子郵件%40email.com&stripeToken = tok_17CD5iF5yf5JD010v47usr7G&ticket_purchase =真正的」 - 這是一個好辦法保持這些參數?安全權不應該存在任何問題,因爲只要我的條帶私鑰仍然是私有的,如果有人獲得了條帶標記,這並不重要。 – Dennis