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

时间:2012-09-20 08:51:30

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我想在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默认路由,但我不确定如何。

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

3 个答案:

答案 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