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 ”,了解如何解决问题。
因此,解决问题所需的更改如下:
- 将
app/controllers/charge_controller.rb
重命名为app/controllers/charges_controller.rb
- 将
class ChargeController
重命名为class ChargeController
class ChargesController
- 替换
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
。