15

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

将不胜感激任何帮助(以及更好的问题标题的建议!)

4

4 回答 4

24

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

就我而言,问题是TLA::ThingsController正在解决Tla::ThingsController

将以下内容放在我的初始化程序文件夹中修复了它

config/initializers/inflections.rb

ActiveSupport::Inflector.inflections do |inflect|
  inflect.acronym 'TLA'
end
于 2016-02-25T13:40:14.277 回答
3

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

resources :abc_things, :only => [:index], :controller => "ABCThings"
于 2012-09-20T11:39:06.990 回答
2

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

# abc_thing.rb

可以包含

class ABCThing

  def hello
    puts "Hello World"
  end

end

或者

class AbcThing

  def hello
    puts "Hello World"
  end

end
于 2014-12-09T18:28:22.970 回答
0

当你运行命令

rails generate model ABCThings

它将生成模型而不是控制器。如果您希望模型和控制器都使用以下

rails generate scaffold ABCThings

我认为您没有使用 rails 命令生成控制器,因此使用以下命令生成控制器时出现问题

rails generate controller ABCThings

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

class AbcThingsController < ApplicationController
end
于 2012-09-20T09:00:58.357 回答