找不到带下划线的路线或未正确处理

Ala*_*ano 2 ruby routes ruby-on-rails ruby-on-rails-4

我在路线上有这个:

Rails.application.routes.draw do
  namespace :api do
    namespace :v3_4 do
      # .....
Run Code Online (Sandbox Code Playgroud)

和控制器 app/controllers/api/v3_4/base_controller

module Api
  module V3_4
    class BaseController < ApplicationController
      # ......
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

app/controllers/api/v3_4/another_controller

module Api
  module V3_4
    class AnotherController < ApplicationController

    end
  end

end
Run Code Online (Sandbox Code Playgroud)

耙路:

          Prefix Verb        URI Pattern                     Controller#Action
   api_v3_4_test GET         /api/v3_4/test(.:format)        api/v3_4/base#test
 api_v3_4_one GET|OPTIONS /api/v3_4/one(.:format)      api/v3_4/another#one
        api_v3_4 GET|OPTIONS /api/v3_4/two/:id(.:format)  api/v3_4/another#two
Run Code Online (Sandbox Code Playgroud)

但是对于这个请求,我得到了 Routing Error Uninit Constant uninitialized constant Api::V34

请注意错误消息中没有下划线。但是我的项目根本没有V34行,既没有v34,也只有v3_4和V3_4

Max*_*pov 5

Rails _会变成一个单词分隔符,因此它将搜索Api :: V34,您可以通过编辑来更改该行为config/initializers/inflections.rb

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym 'V3_4'
end
Run Code Online (Sandbox Code Playgroud)

此外,如果您想将Api名称空间更改为API,因为它是首字母缩写词,那么您也可以在此处进行操作:

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym 'V3_4'
  inflect.acronym 'API'
end
Run Code Online (Sandbox Code Playgroud)

更多信息:http : //api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html