Stripe:ActionController :: UrlGenerationError |没有路线匹配|缺少必需的键:[:id]

时间:2013-12-08 06:21:51

标签: ruby-on-rails ruby stripe-payments

我只是在学习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

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

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

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

  1. app/controllers/charge_controller.rb重命名为app/controllers/charges_controller.rb
  2. class ChargeController重命名为class ChargesController
  3. resources :charge替换为resource :charge
  4. 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。