我正在使用Stripe簽出工具來開發我的工具租賃應用程序項目的結帳過程。當我想要動態地改變租用價格時,我遇到了一個問題,這取決於發佈工具的人想要租用的租用價格。如何從單獨的控制器訪問實例變量(結算量變量)
我嵌套我的工具中我的費用,像這樣:
Rails.application.routes.draw do
devise_for :users
root 'pages#home'
resources :tools do
resources :charges
get :manage, :on => :collection
end
當我瀏覽到/工具/ 1 /費用/新我收到以下錯誤:
Couldn't find Tool with 'id'=
這是我的費用控制:
class ChargesController < ApplicationController
def new
@tool = Tool.find(params[:id])
@amount = @tool.rent_price * 100
end
def create
@tool = Tool.find(params[:id])
@amount = @tool.rent_price * 100
customer = Stripe::Customer.create(
:email => '[email protected]',
:card => params[:stripeToken]
)
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => @amount,
:description => 'Rails Stripe customer',
:currency => 'usd'
)
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to charges_path
end
private
def tool_params
params.require(:tool).permit(:name, :description, :user_id, :tool_image, :rent_price)
end
end
這是我的工具控制器:
class ToolsController < ApplicationController
before_action :set_tool, only:[:show, :edit, :update, :destroy]
before_action :authenticate_user!, only:[:new, :destroy, :edit, :manage], notice: 'you must be logged in to proceed'
def index
@tools = Tool.all
end
def manage
@user = current_user
@tools = @user.tools
end
def show
end
def new
@tool = Tool.new
end
def create
@tool = Tool.new(tool_params)
if @tool.save
redirect_to @tool
else
redirect_to :action => "new"
flash[:notice] = "You did not fill out all the fields"
end
end
def edit
end
def update
@tool.update(tool_params)
redirect_to @tool
end
def destroy
@tool.destroy
redirect_to tools_path
end
private
def set_tool
@tool = Tool.find(params[:id])
end
def tool_params
params.require(:tool).permit(:name, :description, :user_id, :tool_image, :rent_price)
end
end
看看我的收費控制器。 Stripe結帳文檔通常具有硬編碼到@amount實例變量中的金額值。不過,我希望它由工具創建者設置。我在我的工具表上有一個rent_price列,並且想要將此值傳遞給金額實例變量。
我試圖通過找到正在創建費用的工具來做到這一點。但是沒有收費模式,因此工具和收費之間沒有關聯。條紋結賬無需使用模型。在這種情況下,我不確定如何訪問收費控制器中由工具創建者(Tool.rent_price)設置的金額。看起來沒有Tool.id被傳遞給參數。有想法該怎麼解決這個嗎?
我想我會創建一個收費模型,即使條紋不說,並使用一個關聯鏈調用的金額。但不知道是否有更好的方式,而不必創建收費模型。
您可以使用'rake routes'來檢查存在哪些路由以及它們採用哪些參數。 – spickermann