【问题标题】:No Route Matches error - with Nested Resource没有路由匹配错误 - 使用嵌套资源
【发布时间】:2011-05-23 15:48:04
【问题描述】:

我的routes.rb 文件中有以下嵌套资源

  resource :issuer do
    resources :certificates
  end

我的模特:

class Issuer < ActiveRecord::Base
  has_many :certificates
end

class Certificate < ActiveRecord::Base
  belongs_to :issuer
end

访问时出现以下错误: /issuer/2/certificates

No route matches {:action=&gt;"edit", :controller=&gt;"certificates"}

任何帮助将不胜感激..提前致谢!

编辑:我的rake routes

    issuer_certificates GET    /issuer/:issuer_id/certificates(.:format)          {:action=>"index", :controller=>"certificates"}
                        POST   /issuer/:issuer_id/certificates(.:format)          {:action=>"create", :controller=>"certificates"}
 new_issuer_certificate GET    /issuer/:issuer_id/certificates/new(.:format)      {:action=>"new", :controller=>"certificates"}
edit_issuer_certificate GET    /issuer/:issuer_id/certificates/:id/edit(.:format) {:action=>"edit", :controller=>"certificates"}
     issuer_certificate GET    /issuer/:issuer_id/certificates/:id(.:format)      {:action=>"show", :controller=>"certificates"}
                        PUT    /issuer/:issuer_id/certificates/:id(.:format)      {:action=>"update", :controller=>"certificates"}
                        DELETE /issuer/:issuer_id/certificates/:id(.:format)      {:action=>"destroy", :controller=>"certificates"}

【问题讨论】:

    标签: ruby-on-rails ruby routing rails-routing


    【解决方案1】:

    您应该在引用 :issuer 时使用资源(复数)而不是资源。所以请试试这个:

    resources :issuers do
       resources :certificates
    end
    

    issuers/2/certificates 也可以。

    【讨论】:

    【解决方案2】:

    在您的 routes.rb 文件中,您将 issuer 定义为单一资源

      resource :issuer do         # <-----  using resource instead of resources
        resources :certificates
      end 
    

    对于单一资源,您获得的路线将不允许匹配 :id,因此在您的示例中,

    issuer/2/certificates
    

    让你悲伤的是“2”。您应该摆脱它或将 :issuer 定义为您的 routes.rb 文件中的标准(非单一)资源。

    【讨论】:

    • 没关系。从您发布的 rake 路由输出中,我看到 issuer_ids 是匹配的。您可能只是在问题中的 routes.rb 中打错了字。
    【解决方案3】:

    您没有为/issuer/2/certificates 定义PUT。相反,您为/issuer/2/certificates/123 定义了它。这就是您收到该错误的原因。

    如果您尝试编辑certificate,请确保生成正确的链接并包含certificate_id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多