Jasdeep Singh
Jasdeep Singh

Reputation: 3326

No Route Matches error - with Nested Resource

I have the following Nested Resource in my routes.rb file

  resource :issuer do
    resources :certificates
  end

My Models:

class Issuer < ActiveRecord::Base
  has_many :certificates
end

class Certificate < ActiveRecord::Base
  belongs_to :issuer
end

I get the following error when i visit: /issuer/2/certificates

No route matches {:action=>"edit", :controller=>"certificates"}

Any help would be appreciated.. Thanks in advance!

EDIT : MY 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"}

Upvotes: 0

Views: 1564

Answers (3)

Mike E
Mike E

Reputation: 5677

In your routes.rb file you are defining issuer as a singular resource

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

With singular resources, the routes you get won't allow an :id to be matched, so in your example,

issuer/2/certificates

it's the "2" that's giving you grief. You should either get rid of it or define :issuer as a standard (non-singular) resource in your routes.rb file.

Upvotes: 1

Zepplock
Zepplock

Reputation: 29135

You don't have PUT defined for /issuer/2/certificates. instead you have it defined for /issuer/2/certificates/123. That's why you get that error.

If you are trying to edit the certificate then make sure you generate a correct link and include certificate_id.

Upvotes: 0

Ireneusz Skrobis
Ireneusz Skrobis

Reputation: 1533

You should use resources (plural) instead of resource in refer to :issuer. So please try this:

resources :issuers do
   resources :certificates
end

and issuers/2/certificates will work.

Upvotes: 2

Related Questions