双层深度范围控制器的路由错误(未初始化的常量)

时间:2017-01-25 06:45:21

标签: ruby-on-rails ruby routes

所以我一直在寻找项目中几个文件夹的命名空间。

当我命名1-Layer deep时,我没有任何问题,但只要我将路由范围缩小到更深的另一个文件夹(以及相应的控制器文件夹/名称),我就会收到此错误:

Routing Error uninitialized constant Individuals

我的意思是文件夹深度,是tyres_controller.rb,以及项目中的这一层深度:

  • 1层 app/controllers/<1st_level_deep>/tyres_controller.rb

  • 2层 app/controllers/<1st_level_deep>/<2nd_level_deep>/tyres_controller.rb

以下是两种情况:

1层深度名称空间控制器

app/controllers/tyre_checks/tyre_checks_controller.rb

module TyreChecks
  class TyreChecksController < ApplicationController
   ...
  end
end

routes.rb

scope module: 'tyre_checks' do
  resources :tyre_checks, only: [:new, :create] do
  end
end

...

match '/tyre-checks', to: 'tyre_checks/tyre_checks#new', via: :get, as: :start_tyre_check

2层深层命名空间控制器

app/controllers/tyre_checks/individuals/tyre_checks_controller.rb

module TyreChecks
  module Individuals
    class TyreChecksController < ApplicationController
     ...
    end
  end
end

routes.rb

scope module: 'tyre_checks' do
  scope module: 'individuals' do
    resources :tyre_checks, only: [:new, :create] do
    end
  end
end

...

match '/individuals/tyre-check', to: 'individuals/tyre_checks/tyre_checks#new', via: :get, as: :start_tyre_check

如果您向我提出要求

  • 我认为这与此部分有关,以及Rails在/结束时解释请求中额外individuals的方式:

to: 'individuals/tyre_checks/tyre_checks#new', via: :get, as: :start_tyre_check

1 个答案:

答案 0 :(得分:1)

我意识到我做了什么,在定义路线时犯了一个简单的错误,根据初始匹配的网址(match '/individuals/tyre-check')误导了自己。

基本上,如果你看一下控制器结构,它就是这样命名的:

module TyreChecks
  module Individuals
    class TyreChecksController < ApplicationController
     ...
    end
  end
end

当翻译为controller#action格式时:

tyre_checks/individuals/tyre_checks#action

但我所做的就是:

individuals/tyre_checks/tyre_checks#action

我把它们绕错了路。这是我写的第一部误导我的地方:

match '/individuals/tyre-check'

现在全部排序;)