2008-09-30 5 views
4

Je travaille sur la section admin d'une nouvelle application rails et j'essaie de configurer certaines routes pour faire les choses correctement. Je le contrôleur suivant:RoR: routes d'espace de noms imbriquées, erreur de méthode non définie

class Admin::BlogsController < ApplicationController 
    def index 
    @blogs = Blog.find(:all) 
    end 

    def show 
    @blog = Blog.find(params[:id]) 
    end 

    ... 
end 

dans routes.rb:

map.namespace :admin do |admin| 
    admin.resources :blogs 
end 

dans les vues/admin/blogs/index.html.erb:

<% for blog in @blogs %> 
    <%= link_to 'Delete', admin_blog(blog), :method => :delete 
<% end %> 

j'ai vérifié que la routes existent:

admin_blogs GET /admin/blogs {:action => "index", :controller=>"admin/blogs"} 
admin_blog GET /admin/blogs/:id {:action => "show", :controller => "admin/blogs"} 
.... 

mais quand je essayez de voir http://localhost:3000/admin/blogs je reçois cette erreur:

undefined method 'admin_blog' for #<ActionView::Base:0xb7213da8> 

où je vais mal et pourquoi?

Répondre

10

Votre lien Supprimer devrait se terminer en _path:

<%= link_to 'Delete', admin_blog_path(blog), :method => :delete %> 
+0

ou _url!/10char –

2

Je suppose que vous utilisez des rails 2.0.x donc la façon dont vous générer un itinéraire est __path

admin_blog_path(blog) 

et si vous montez une version précédente, je pense qu'il est juste

blog_path(blog) 
1

Side note: Je vois aussi que votre contrôleur est défini comme ceci:

class Admin::BlogsController < ApplicationController 

ne devrait-il pas être comme ça?

class Admin::BlogsController < Admin::ApplicationController 
Questions connexes