【问题标题】:Rails 3.2 routing error with scopeRails 3.2 范围内的路由错误
【发布时间】:2012-10-12 17:02:03
【问题描述】:

这个问题困扰了我一整天...

嗯;

我只是想将我的所有管理页面放在 /admin 目录中,并仅通过 domain/admin 样式接收它们。我尝试使用this 指南让它运行。

根据该官方指南,我正在寻找的是在我的routes.rb 文件中使用scope。因为,我在我的页面中使用了多次命名路由音调。我不希望我的 program_path 命名路由更改 admin_program_path,因为我有 28 种不同的用法。

所以我应该使用scope 而不是namespace

问题是:我无法让scope 与我的项目一起工作。

这是我的路线.rb

 scope "/admin" do

  get "access/login"
  get "access/index"

  match "access/login_attempt", to: "access#login_attempt"
  match "access/logout", to: "access#logout"

  resources :admin_users

  root to: 'programs#index'

  resources :programs
  resources :program_categories
  resources :program_subcategories

  resources :articles
  resources :pictures



  match '/kategoriler/:id' => 'program_categories#show'
  match '/kategoriler' => 'program_categories#index'
  match '/kategori/yeni' => 'program_categories#new'
  match 'program/yeni' => 'programs#new'
  match 'programlar' => 'programs#index'
  match '/progam_categories/select_category/:program_id' => 'program_categories#select_category'
  match '/program_subcategories/select_subcategory' => 'program_subcategories#select_subcategory'
  match '/program_subcategory/add_subcategory' => 'program_subcategories#add_subcategory'

  end

这是我的控制器开始:

class ProgramsController < ApplicationController

就像这里所说的:

If you want to route /admin/posts to PostsController (without the Admin:: module prefix), you could use
scope "/admin" do
  resources :posts, :comments
end

结果,我得到了什么?

这个错误信息:

Routing Error

uninitialized constant ProgramsController

无论我尝试访问哪个控制器,错误都会以这种方式发生变化。例如 uninitialized constant ProgramCategoriesControlleruninitialized constant ProgramSubcategoriesController 等...

我尝试将application_controller 放在管理文件夹和控制器目录的根目录中...没办法。

我的错误在哪里? :(

提前谢谢...

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2


    【解决方案1】:

    试试:module参数:

    scope '/admin', :module => 'admin' do
      # ...
    end
    

    假设您的控制器位于 Admin 模块命名空间中,因此它们以 'Admin::' 开头。

    [编辑]

    这是对您在下面的 cmets 中有关路径冲突的问题的回应。可以使用:as参数,例如:

    scope '/admin', :module => 'admin', :as => 'admin' do
      # ...
    end
    

    您可以通过rake routes查看。 admin 范围内的所有路由现在都应该以 'admin_' 开头

    【讨论】:

    • 非常非常非常非常感谢!!!但是这个答案还需要一个补充;使用模块参数,我需要为我的所有控制器添加 Admin:: 前缀,请编辑您的答案以供更多搜索者使用。
    • 好的,所以您手动将控制器放入管理目录?如果您使用例如rails g controller admin/posts 生成控制器,它们从一开始就正确命名,即“Admin::PostsController”。
    • Err.. 关于这个的另一个小问题。例如,当我想在 Admin 目录之外创建同名控制器时,帮助文件和 css 文件存在一些冲突。我该怎么办?
    • 与管理模块控制器相关的视图、资产、助手、测试也应该放在适当的管理子目录中。例如,查看使用 rails g controller admin/hotels 创建的文件(您可以稍后使用 rails d controller admin/hotels 销毁它们)。视图在app/views/admin/hotels,助手在app/helpers/admin/等。js和样式也是如此。
    • 好吧,范围工作正常,但现在我对这种方法有另一个问题。我的前端有同名的控制器,当我尝试在其中使用命名路由时,我被重定向到 admin/ 端。例如'&lt;%= link_to "Category name", program_category_path %&gt; 将我带到 admin/program_categories/:id ...我该怎么办? :|
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2014-04-28
    • 1970-01-01
    相关资源
    最近更新 更多