我只是在学习RoR,需要我在Stripe集成方面遇到麻烦。除了我已经将“收费”更改为“收费”外,我已按照here做了所有事情。
我收到的错误是:
No route matches {:action=>"show", :controller=>"charge"} missing required keys: [:id]
。
这不是让我这么做的:<%= form_tag charge_path do %>
这是我的控制者:
class ChargeController < ApplicationController
def new
end
def create
# Amount in cents
@amount = 0
customer = Stripe::Customer.create(
:email => 'jon@jonkhaykin.com',
:card => params[:stripeToken]
)
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => @amount,
:description => 'Inspire App Charge',
:currency => 'usd'
)
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to charge_path
end
end
我的routes.rb文件有:
resources :charge
答案 0 :(得分:4)
你不应该偏离Rails标准,大部分时间都会惩罚你。您应该将控制器重命名为ChargesController
并查看“Singular Resources”,了解如何解决问题。
因此,解决问题所需的更改如下:
app/controllers/charge_controller.rb
重命名为app/controllers/charges_controller.rb
class ChargeController
重命名为class ChargesController
resources :charge
替换为resource :charge
将resources :charge
替换为resource :charge
,您将使用路径/charge
创建一个单一的费用资源。
使用您当前的设置,即resources :charge
,您将看到以下内容(这不是您想要的):
charge_index GET /charge(.:format) charge#index
POST /charge(.:format) charge#create
new_charge GET /charge/new(.:format) charge#new
edit_charge GET /charge/:id/edit(.:format) charge#edit
charge GET /charge/:id(.:format) charge#show
PUT /charge/:id(.:format) charge#update
DELETE /charge/:id(.:format) charge#destroy
如您所见,charge_path
解析为charge#show
,但如果您查看路径,则还需要:id
参数,而您在form_tag :charge_path
中未提供该参数调用
答案 1 :(得分:0)
您需要将控制器名称更改为ChargesController
,将路径助手更改为charges_path
,将路径更改为resources :charges
。
此外,表单应为POST
ing。