找不到带下划线的路线或者没有正确对待它

时间:2016-03-14 07:36:41

标签: ruby-on-rails ruby ruby-on-rails-4 routes

我在路线中有这个:

Rails.application.routes.draw do
  namespace :api do
    namespace :v3_4 do
      # .....

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

module Api
  module V3_4
    class BaseController < ApplicationController
      # ......
    end
  end
end

app/controllers/api/v3_4/another_controller

module Api
  module V3_4
    class AnotherController < ApplicationController

    end
  end

end

rake routes:

          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

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

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

2 个答案:

答案 0 :(得分:4)

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

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym 'V3_4'
end

此外,如果您想将Api命名空间更改为API,因为它是首字母缩略词,您也可以在那里执行:

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym 'V3_4'
  inflect.acronym 'API'
end

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

答案 1 :(得分:0)

Ruby-Style-Guide帮助我澄清了这些问题。请参阅naming部分。