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

时间:2008-09-30 14:11:25

标签: ruby-on-rails ruby

我正在开发一个新的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>

我哪里出错了,为什么?

3 个答案:

答案 0 :(得分:10)

您的删除链接应以_path:

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

答案 1 :(得分:2)

我假设您正在使用rails 2.0.x,因此您生成路由的方式是 __Path

admin_blog_path(blog) 

如果您使用之前的版本,我认为它只是

blog_path(blog)

答案 2 :(得分:1)

旁注: 我还看到你的控制器定义如下:

class Admin::BlogsController < ApplicationController

不应该是这样的吗?

class Admin::BlogsController < Admin::ApplicationController