Rails 3的命名空间路由

4
我有一个管理命名空间和一个位于管理命名空间之外的公司脚手架。我想把公司放进管理命名空间。然后,我把companies_controller放到了admin目录下,并将定义更改为class Admin::CompaniesController < Admin::AdminController,并将公司视图放到/app/views/中的admin目录下,并将companies_helper放入admin目录中。现在它看起来如下所示:
module Admin::CompaniesHelper
end

routes.rb中的命名空间:

  namespace :admin do
    root :to => "companies#index"
    resources :companies
  end

当我访问localhost:3000/admin时,我会得到以下错误:

undefined method `company_path' for #:0xb696b408>

现在请告诉我如何编辑链接以使链接正常工作?

3个回答

4
当您将控制器移动到管理命名空间时,您需要更改脚手架模板中创建的链接的路由。例如,如果您的模板使用company_path,则链接将更改为admin_company_path。
要查看应用程序中任何给定时间点的路由,请在Rails应用程序的根目录中从命令行运行“rake routes”。这将显示您应用程序中的所有路由。

2

由于公司位于命名空间admin下,因此您需要在路径前加上admin前缀。

像这样:

admin_company_path(@company)

更多有关Rails路由和命名空间的信息,请参见Rails指南


0
我得到了一种丑陋的解决方案,但它能够工作。我生成了一个新的脚手架,但是方式不同: rails generate scaffold Admin::Companies 而不是 rails generate scaffold Companies 但我仍然不明白助手如何为资源生成URL :(


我使用 rails g scaffold Admin::Grommets 生成了一个虚拟对象,然后将其与我手动移动到 admin 中的文件进行了比较。 - Dominic Sayers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接