路由错误:未初始化的常量

loy*_*ert 13 routes ruby-on-rails ruby-on-rails-3

我正在尝试为移动API设置路由,该API应具有版本化的api路径.我已经可以使移动Auth工作,它是在位于/ controllers/api/v1/mobile /的单独的Controller AuthController中实现的.

用法示例:

myapp.com/api/v1/mobile/auth
Run Code Online (Sandbox Code Playgroud)

但是现在我想将我现有的ressources-Controllers注册到这个路径模式作为额外的api-routes.具体:这将是位于/controllers/tracker/tasks_controller.rbTasksController.所以我在路由定义中添加了移动路由:

# routes.rb
namespace :tracker, path: 'timetracking' do
  resources :tasks, 'jobs'
end

namespace :api do
  namespace :v1 do
    namespace :mobile do
      resources :auth, :only => [:create, :destroy]

      namespace :tracker do    #added mobile route
        resource :tasks, controller: 'tracker/tasks', as: :mobile_tasks
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,当我拨打myapp.com/api/v1/mobile/tracker/tasks时,会出现错误消息:

Routing Error
uninitialized constant Api::V1::Mobile::Tracker
Run Code Online (Sandbox Code Playgroud)

我特别添加了别名:mobile_tasks到此路由,以避免与上面的原始任务路由发生任何冲突.有什么想法,如何为这条路线正确设置控制器?

更新#1

将此路由定义为范围而不是命名空间,也不起作用.

scope "/api/v1/mobile/tracker" do
    resources :tasks, controller: 'tracker/tasks', as: :mobile_tasks
end
Run Code Online (Sandbox Code Playgroud)

但这一次,它甚至没有解决路径路径本身.

Routing Error
No route matches [GET] "/api/v1/mobile/tracker/tasks"
Run Code Online (Sandbox Code Playgroud)

我认为这可能是一个问题,我的附加mobile-api路由试图指向一个完全不同的命名空间跟踪器.

小智 21

根据http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing,您应该使用范围而不是命名空间.

如果你想路由/admin/postsPostsController(没有Admin:: module prefix),你可以使用:

scope "/admin" do
  resources :posts, :comments
end
Run Code Online (Sandbox Code Playgroud)