我在路线中有这个:
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
答案 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部分。