我想在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默认路由,但我不确定如何。
感谢任何帮助(以及更好的问题标题的建议!)
答案 0 :(得分:16)
我遇到了这个问题并在尝试了上述所有解决方案之后;能够使用变形器解决我的问题。
就我而言,问题是TLA::ThingsController
被解析为Tla::ThingsController
将以下内容放入我的初始化程序文件夹中
config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.acronym 'TLA'
end
答案 1 :(得分:2)
在某些时候,Ruby可能已经改变了,但是对于连续多个大写字母(缩略语或首字母缩写)的命名类,您不再需要在文件名中包含下划线。
# abc_thing.rb
可以包含
class ABCThing
def hello
puts "Hello World"
end
end
或
class AbcThing
def hello
puts "Hello World"
end
end
答案 2 :(得分:0)
运行命令
时rails generate model ABCThings
它将生成模型而不是控制器。 如果你想要使用模型和控制器
rails generate scaffold ABCThings
我认为你不是通过使用rails命令生成控制器,因此出现了问题 生成控制器使用以下命令
rails generate controller ABCThings
你可以/app/controllers/abc_things_controller.rb
如下
class AbcThingsController < ApplicationController
end