使用型号名称中的大写字母覆盖Rails控制器路由

我想在rails中创建一个模型:

rails generate model ABCThing 

所以这将创建一个表, abc_things 。 大。 问题出在控制器和路由上。 我希望我的控制器是:

 class ABCThingsController < ApplicationController end 

但是,在添加routes.rb

 resources :abc_things, :only => [:index] 

并创建相应的index视图,我在浏览器中收到以下错误:

 Expected /app/controllers/abc_things_controller.rb to define AbcThingsController 

问题很容易看出( "ABCThings".tableize.classify => "AbcThing" ),但我不太确定如何修复它。 我想覆盖从视图到控制器的rails默认路由,但我不知道如何。

非常感谢任何帮助(以及更好的问题标题的建议!)

在尝试了上述所有解决方案后,我遇到了这个问题; 能够使用变形器修复我的问题。

在我的例子中,问题是TLA::ThingsController被解析为TlaThingsController

将以下内容放入我的初始化文件夹中修复它

config/initializers/inflections.rb

 ActiveSupport::Inflector.inflections do |inflect| inflect.acronym 'TLA' end 

您应该在routes.rb中设置自定义控制器名称:

 resources :abc_things, :only => [:index], :controller => "ABCThings" 

这可能在某些时候已经改变了Ruby,但是对于连续命名具有多个大写字母的类(首字母缩写词或首字母缩写词),您不再需要在文件名中包含下划线。

 # abc_thing.rb 

可以包含

 class ABCThing def hello puts "Hello World" end end 

要么

 class AbcThing def hello puts "Hello World" end end 

当你运行命令

 rails generate model ABCThings 

它将生成模型而不是控制器。 如果你想要模型和控制器使用以下

 rails generate scaffold ABCThings 

我认为你不是通过使用rails命令生成控制器,因此出现问题以生成控制器使用以下命令

 rails generate controller ABCThings 

你可以/app/controllers/abc_things_controller.rb如下

 class AbcThingsController < ApplicationController end