Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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 带命名空间的Rails 3路由_Ruby On Rails_Ruby On Rails 3_Routing_Namespaces_Routes - Fatal编程技术网

Ruby on rails 带命名空间的Rails 3路由

Ruby on rails 带命名空间的Rails 3路由,ruby-on-rails,ruby-on-rails-3,routing,namespaces,routes,Ruby On Rails,Ruby On Rails 3,Routing,Namespaces,Routes,当尝试访问以下URL时,我得到一个404错误页面: dev.mydomain.com/api 然而,my routes.rb文件提到此路由确实存在: routes.rb 耙道 控制器 /app/controllers/developers/apidoc/main_controller.rb class Developers::Apidoc::MainController < Developers::BaseController def index end end 我猜问题是您的路

当尝试访问以下URL时,我得到一个404错误页面

dev.mydomain.com/api

然而,my routes.rb文件提到此路由确实存在:

routes.rb 耙道 控制器 /app/controllers/developers/apidoc/main_controller.rb

class Developers::Apidoc::MainController < Developers::BaseController
  def index
  end
end

我猜问题是您的路径指向
api/developers/apidoc/main
,但您的类只是
developers::apidoc::MainController
。您不应该使用
api
为该路由命名,也不应该将api添加到控制器的名称空间-
api::Developers::Apidoc::MainController

另一个需要记住的重要因素是路由名称空间需要伴随目录路径才能保持一致。出错还会导致如下错误:

Routing Error

uninitialized constant Api::Developers
namespace "api" do
  namespace "developers" do
    ...
  end
end
在我的例子中,我有这样一个路由结构:

Routing Error

uninitialized constant Api::Developers
namespace "api" do
  namespace "developers" do
    ...
  end
end

文件夹/目录结构应该是app/controllers/api/developers/TL;DR
命名空间
替换为
范围

给定以下文件夹结构

 Rails.root
  |
  +-- app/
  |    |
  |    +-- controllers/
  |         |
  |         +-- jobs_controller.rb
  +-- config/
       |
       +-- routes.rb
下面
routes.rb中的代码段给出了一个错误
ActionController::RoutingError:uninitialized constant Api:

namespace :api do
  namespace :v1 do
    resources :jobs
  end
end
而以下工作:

scope :api do
  scope :v1 do
    resources :jobs 
  end
end
原因简述如下:

命名空间范围将自动添加
:以及

:模块
:路径
前缀

事实上,名称空间只是范围的包装器,包含一系列预定义选项:

# File actionpack/lib/action_dispatch/routing/mapper.rb, line 871
def namespace(path, options = {})
  path = path.to_s

  defaults = {
    module:         path,
    path:           options.fetch(:path, path),
    as:             options.fetch(:as, path),
    shallow_path:   options.fetch(:path, path),
    shallow_prefix: options.fetch(:as, path)
  }

  scope(defaults.merge!(options)) { yield }
end
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 871
def namespace(path, options = {})
  path = path.to_s

  defaults = {
    module:         path,
    path:           options.fetch(:path, path),
    as:             options.fetch(:as, path),
    shallow_path:   options.fetch(:path, path),
    shallow_prefix: options.fetch(:as, path)
  }

  scope(defaults.merge!(options)) { yield }
end