Ruby on rails 使用型号名称中的大写字母替代Rails控制器路由

Ruby on rails 使用型号名称中的大写字母替代Rails控制器路由,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,我想在rails中创建一个模型: rails generate model ABCThing 这将创建一个表,abc\u things。伟大的问题来自控制器和路由。我希望我的控制器是: class ABCThingsController < ApplicationController end 创建相应的索引视图时,浏览器中出现以下错误: Expected /app/controllers/abc_things_controller.rb to define AbcThingsContr

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

rails generate model ABCThing
这将创建一个表,
abc\u things
。伟大的问题来自控制器和路由。我希望我的控制器是:

class ABCThingsController < ApplicationController
end
创建相应的
索引
视图时,浏览器中出现以下错误:

Expected /app/controllers/abc_things_controller.rb to define AbcThingsController
这个问题很容易看出(
“ABCThings.tableze.classify=>“AbcThing”
),但我不太确定如何解决它。我想覆盖rails从视图到控制器的默认路由,但不确定如何覆盖

如果您在运行命令时有任何帮助(以及对更好的问题标题的建议!)

,我们将不胜感激

rails generate model ABCThings
它将生成模型,而不是控制器。 如果您想同时使用模型和控制器,请使用以下命令

rails generate scaffold ABCThings
我认为您并没有使用rails命令生成控制器,所以出现了问题 要生成控制器,请使用以下命令

rails generate controller ABCThings
您可以
/app/controllers/abc\u things\u controller.rb
如下所示

class AbcThingsController < ApplicationController
end
class AbcThingsController
您应该在routes.rb中设置自定义控制器名称:

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

Ruby在某些时候可能已经改变了这一点,但是对于一行中使用多个大写字母(首字母缩写或首字母缩写)命名类,您不再需要在文件名中包含下划线

# abc_thing.rb
可能包含

class ABCThing

  def hello
    puts "Hello World"
  end

end


我有这个问题,在尝试了以上所有的解决方案之后;能够用拐点修正我的问题

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

将以下内容放在我的initializers文件夹中修复了它

config/initializers/definctions.rb

resources :abc_things, :only => [:index]
ActiveSupport::Inflector.inflections do |inflect|
  inflect.acronym 'TLA'
end

嗯?我手动创建了控制器。我想要
类ABCThingsController
而不是
类ABCThingsController
我能问你到底为什么要这样做吗?惯例是RoR的优势之一,为什么要打破它们?顺便说一句,模特的名字不应该是复数的。模特一代中的复数是一个打字错误,但你可以肯定的是,有无数的三个字母的首字母缩写词,仅大写首字母并不会产生很多语法错误sense@cthulhu出于同样的原因,Rails支持屈折变化。它们应该是惯例,而不是法律。同样的错误信息。我还认为您的意思是
:controller=>“ABCThings”
哦,对不起,是的,只有没有“controller”部分的名称,立即编辑这将立即生成警告,如下所示:“仅支持目录符号。使用ruby常量符号指定控制器(例如
:controller=>“Admin::UserPermissions”
)可能会导致路由问题并导致警告。”由于“现在只支持目录通知”,我通过以下方式实现了我想要的:在
app/controllers/abc\u things\u controller.rb
中创建一个定义
ABCController
类的控制器,然后在路由中说:
资源:abc\u things,controller:“a_b_c_东西“
。似乎在Rails 4.2.7中工作默认的config/inflections.rb文件提供了一个示例:
#inflection.acronym“RESTful”
,这可能会导致人们推断问题的解决方案是使用
inflection.acronym“ABCThing”
。然而,根据我的经验,这行应该是
influct。缩写词“ABC”
@MarkSchneider现在应该更有意义了,希望稍加调整。
ActiveSupport::Inflector.inflections do |inflect|
  inflect.acronym 'TLA'
end