RoR:嵌套的名称空间路由,未定义的方法错误

时间:2020-03-06 14:55:26  来源:igfitidea点击:

我正在研究新的Rails应用程序的管理部分,并且我正在尝试设置一些路线来"正确"地进行操作。我有以下控制器:

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

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

  ...
end

在routes.rb中:

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

在views / admin / blogs / index.html.erb中:

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

我已验证路线是否存在:

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

但是当我尝试查看http:// localhost:3000 / admin / blogs时,出现此错误:

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

我要去哪里错了,为什么?

解决方案

我假设我们使用的是Rails 2.0.x,所以生成路线的方式是
__小路

admin_blog_path(blog)

如果我们使用的是以前的版本,我认为这只是

blog_path(blog)

删除链接应以_path结尾:

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

边注:
我还看到控制器是这样定义的:

class Admin::BlogsController < ApplicationController

难道不是这样吗?

class Admin::BlogsController < Admin::ApplicationController