Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 路由错误:未初始化常量_Ruby On Rails_Ruby On Rails 3_Routes - Fatal编程技术网

Ruby on rails 路由错误:未初始化常量

Ruby on rails 路由错误:未初始化常量,ruby-on-rails,ruby-on-rails-3,routes,Ruby On Rails,Ruby On Rails 3,Routes,我正在尝试为移动API设置路由,它应该有一个版本化的API路径。我已经可以让mobileauth工作了,它是在位于/controllers/api/v1/mobile/的单独控制器AuthController中实现的 用法示例: myapp.com/api/v1/mobile/auth 但现在我想将现有的Resources控制器注册到此路径模式,作为附加api路由。具体:这将是位于/controllers/tracker/tasks\u controller.rb的TaskController

我正在尝试为移动API设置路由,它应该有一个版本化的API路径。我已经可以让mobileauth工作了,它是在位于/controllers/api/v1/mobile/的单独控制器AuthController中实现的

用法示例:

myapp.com/api/v1/mobile/auth
但现在我想将现有的Resources控制器注册到此路径模式,作为附加api路由。具体:这将是位于/controllers/tracker/tasks\u controller.rb的TaskController。因此,我在路由定义中添加了移动路由:

# 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
但是当我调用myapp.com/api/v1/mobile/tracker/tasks时,会出现一条错误消息:

Routing Error
uninitialized constant Api::V1::Mobile::Tracker
我特别将别名:mobile_tasks添加到此路由,以避免与上面的原始任务路由发生任何冲突。有什么想法吗?如何为这条路线正确设置控制器

更新#1

将此路由定义为作用域而不是命名空间也不起作用

scope "/api/v1/mobile/tracker" do
    resources :tasks, controller: 'tracker/tasks', as: :mobile_tasks
end
但这一次,它甚至没有解决路由本身

Routing Error
No route matches [GET] "/api/v1/mobile/tracker/tasks"
我假设这可能是一个问题,我的附加移动api路由试图指向一个完全不同的名称空间跟踪器。

根据您的需要,应该使用范围而不是名称空间

# config/routes.rb
namespace :admin do
  resources :posts, only: [:index]
end

# rake routes
Prefix Verb URI    Pattern                   Controller#Action
admin_posts GET    /admin/posts(.:format)    admin/posts#index
如果要将
/admin/posts
路由到
PostsController
(不带
admin::module前缀),可以使用:

scope "/admin" do
  resources :posts, :comments
end

回答晚了,但仍然可能有帮助:

scope '/v1' do  
  resources :articles, module: 'v1'
end
控制器

# app/controller/v1/articles_controller.rb
class V1::ArticlesController < ApplicationController

end
#app/controller/v1/articles_controller.rb
类V1::ArticlesController
现在,您应该能够访问此url:


添加此答案以明确名称空间和范围

当您使用名称空间时,它将为指定资源的URL路径添加前缀,并尝试在以与名称空间相同的方式命名的模块下定位控制器

# config/routes.rb
namespace :admin do
  resources :posts, only: [:index]
end

# rake routes
Prefix Verb URI    Pattern                   Controller#Action
admin_posts GET    /admin/posts(.:format)    admin/posts#index
当我们添加作用域时,它将只映射给定作用域模式的控制器操作。无需在任何模块下定义控制器

# config/routes.rb
scope :admin do
  resources :posts, only: [:index]
end

# rake routes
Prefix Verb URI    Pattern                   Controller#Action
admin_posts GET    /admin/posts(.:format)    posts#index
注意,控制器只是发布控制器,没有任何模块名称空间

如果我们添加一个
path
选项到作用域,它将映射到控制器,路径选项指定如下

# config/routes.rb
scope module: 'admin', path: 'admin' do
  resources :posts, only: [:index]
end

# rake routes
Prefix Verb URI    Pattern                   Controller#Action
admin_posts GET    /admin/posts(.:format)    admin/posts#index
请注意,控制器现在位于管理模块下

现在,如果我们想更改path方法的名称来标识资源,我们可以将
添加为
选项到scope中

# config/routes.rb
namespace module: 'admin', path: 'admin', as: 'root' do
  resources :posts, only: [:index]
end

# rake routes
Prefix Verb URI    Pattern                  Controller#Action
root_posts GET    /admin/posts(.:format)    admin/posts#index
你可以看到前缀动词的变化


希望它能帮助其他人。

嗨,克里斯,谢谢你的回答。关于您的建议,我使用rails输出更新了我的问题文本。您是否尝试了
rake routes
命令以匹配顺序和名称打印所有定义的路由?它应该可以帮助您调试这个问题。thx获得有关
rake路由的好提示。帮我解决了这个问题:)@loybert-如果你已经解决了你的问题,请继续!更新您的问题,为正确答案添加评论,甚至添加新答案hi@ivar。据我所知,名称空间块太多了,因为它已经隐式地设置了父名称空间,所以运行
rake routes
帮助我看到格式错误的路由路径,它看起来有点像/mobile/api/v1/tracker/tracker/tasks。对不起,我的评论不是那么准确,但如果你自己提出问题,我会看一看遇到了类似的问题,实际上我只需要重新启动
rails服务器
。我想它有必要了解名称空间和所有方面的变化。把它放在那里,以防其他人从谷歌来到这里!