我想在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