【问题标题】:Stripe: ActionController::UrlGenerationError | No route matches | missing required keys: [:id]条纹:ActionController::UrlGenerationError |没有路线匹配 |缺少必需的键:[:id]
【发布时间】:2013-12-08 06:21:51
【问题描述】:

我刚刚学习 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

感谢您的帮助!

【问题讨论】:

  • 一旦您将“charges”更改为“charge”,您就破坏了 RoR 命名约定。

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


【解决方案1】:

您不应该偏离 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

通过将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 调用中没有提供该参数。

【讨论】:

    【解决方案2】:

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

    另外,表格应该是POSTing。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 2015-02-05
      相关资源
      最近更新 更多