Stripe:ActionController :: UrlGenerationError | 没有路线匹配| 缺少必需的密钥:

我只是在学习RoR,需要我在Stripe集成方面遇到麻烦。 我已经完成了这里所说的一切,除了我已经将“收费”更改为“收费”。

我收到的错误是: No route matches {:action=>"show", :controller=>"charge"} missing required keys: [:id]

这不是让我这样做的:

这是我的控制器:

 class ChargeController  '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

谢谢您的帮助!

你不应该偏离Rails标准,这大部分时间会惩罚你。 您应该将控制器重命名为ChargesController并查看“ Singular Resources ”,了解如何解决问题。

因此,解决问题所需的更改如下:

  1. app/controllers/charge_controller.rb重命名为app/controllers/charges_controller.rb
  2. class ChargeController重命名为class ChargeController class ChargesController
  3. 替换resources :charge resource :charge

通过替换resource :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_path charge#show但如果您查看路径,它还需要一个:id您在form_tag :charge_path调用中未提供的:id参数。

您需要将控制器名称更改为ChargesController ,将路径助手更改为charges_path以及将路径更改为resources :charges

此外,表单应该是POST