Rails嵌套资源不起作用

时间:2016-03-03 10:48:16

标签: ruby-on-rails stripe-payments

我试图在本教程之后将Stripe添加到我的Rails应用程序中,但无法弄清楚出了什么问题:

Assigning Charges To Resources With Stripe Checkout

以下是我的代码,

的routes.rb

  resources :people, :path => "" do
    member do
      put :activate
      put :deactivate
    end
    resources :listings do
      member do
        put :close
        put :move_to_top
        put :show_in_updates_email
      end
      resources :charges
    end

和.haml

= form_tag listings_charges_path(@listings) do

但是有如下错误:

undefined method `listings_charges_path' for #<#<Class:0x007f0690ea1788>:0x007f06b1864b88>

      = form_tag listings_charges_path(@listings) do

是因为收费是否嵌套在列表资源中,而列表还嵌套在另一个列表中?这很奇怪,因为如果我将代码更改回没有嵌套的资源,它完全正常工作。

= form_tag charges_path do

非常感谢任何帮助。

谢谢!

这很有效,但有一些新内容:

          = form_tag person_listing_charges_path(@person, @listing, @charges) do

新错误:

No route matches missing required keys:{:action=>"index", :controller=>"charges", :id=>"111-abc", :listing_id=>nil, :locale=>nil, :person_id=>#<Listing id: 111, ..........} [:listing_id]

2 个答案:

答案 0 :(得分:0)

如果你想这样做,你的路径是people_listing_charge_path(@people, @listing, @charge)。或者也许person_listing_charge_path(@person, @listing, @charge)取决于Rails助手的工作原理。正如您所看到的,处理起来非常麻烦。

如果您检查Rails guide on nested route,它会建议一些处理嵌套的方法。我强烈建议你遵循这些建议。

答案 1 :(得分:0)

你可能应该这样做(如果你的人是单数的人)

person_listing_charge_path(@person, @listing, @charge)

要了解您的路线,您可以rake routes

仅供参考:根据ruby on rails guides

  

资源不应该嵌套超过1级。