Reputation: 14448
I am working on the admin section of a new rails app and i'm trying to setup some routes to do things "properly". I have the following controller:
class Admin::BlogsController < ApplicationController
def index
@blogs = Blog.find(:all)
end
def show
@blog = Blog.find(params[:id])
end
...
end
in routes.rb:
map.namespace :admin do |admin|
admin.resources :blogs
end
in views/admin/blogs/index.html.erb:
<% for blog in @blogs %>
<%= link_to 'Delete', admin_blog(blog), :method => :delete
<% end %>
i have verified that the routes exist:
admin_blogs GET /admin/blogs {:action => "index", :controller=>"admin/blogs"}
admin_blog GET /admin/blogs/:id {:action => "show", :controller => "admin/blogs"}
....
but when i try to view http://localhost:3000/admin/blogs i get this error:
undefined method 'admin_blog' for #<ActionView::Base:0xb7213da8>
where am i going wrong and why?
Upvotes: 4
Views: 5424
Reputation: 71
Side note: I also see that your controller is defined like this:
class Admin::BlogsController < ApplicationController
shouldn't it be like this?
class Admin::BlogsController < Admin::ApplicationController
Upvotes: 1
Reputation: 115322
Your Delete link should end in _path:
<%= link_to 'Delete', admin_blog_path(blog), :method => :delete %>
Upvotes: 10
Reputation: 734
I'm assuming you are using rails 2.0.x so the way you generate a route is __path
admin_blog_path(blog)
and if you are riding a previous version I think it's just
blog_path(blog)
Upvotes: 2