问题描述
|
我在为帆船赛生成脚手架时遇到问题。当我跑步
rails g scaffold Regatta name:string start_date:datetime
我得到一个名为regattum的模型和一个名为regatta_controller的控制器(而不是regattas_controller)
invoke active_record
create db/migrate/20110609221608_create_regatta.rb
create app/models/regattum.rb
invoke test_unit
create test/unit/regattum_test.rb
create test/fixtures/regatta.yml
route resources :regatta
invoke scaffold_controller
create app/controllers/regatta_controller.rb
invoke erb
create app/views/regatta
create app/views/regatta/index.html.erb
create app/views/regatta/edit.html.erb
create app/views/regatta/show.html.erb
create app/views/regatta/new.html.erb
create app/views/regatta/_form.html.erb
invoke test_unit
create test/functional/regatta_controller_test.rb
invoke helper
create app/helpers/regatta_helper.rb
invoke test_unit
create test/unit/helpers/regatta_helper_test.rb
invoke stylesheets
相同的public / stylesheets / scaffold.css
显然这是一个变形问题,但是每当我修改/config/initializers/inflections.rb时,我都会收到一条错误消息:
The name \'Regatta\' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.
我已经尽我所能使它工作,但我一直遇到错误。任何有关解决方案或解决方法的建议将不胜感激!
更新资料
这是我尝试过的一些方法:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular \'regatta\',\'regattas\'
end
那并没有改变任何东西,所以我尝试了以下一些选项,其中的各种组合都无济于事:
inflect.plural \'regatta\',\'regattas\'
inflect.singular \'regattas\',\'regatta\'
inflect.singular \'regatta\',\'regatta\'
更新2
一旦弄清楚自己做错了什么,这就是我在inflections.rb中使用的代码:
ActiveSupport::Inflector.inflections do |inflect|
inflect.plural \'regatta\',\'regattas\'
inflect.singular \'regatta\',\'regatta\'
inflect.singular \'regattas\',\'regatta\'
end
希望这会在将来对某人有所帮助!
解决方法
鉴于错误消息说
Regatta
已在您的应用程序中使用(Rails显然未保留它),我猜测Regattum
模型仍然存在。
我建议销毁脚手架,然后重试。听起来,一旦在应用程序中定义了单词,Rails就会内置保护功能,以防止更改词尾变化。因此,抛出此错误是为了在这种情况下防止意外行为。
, 我知道这篇文章已经过时了,但我想我也将贡献我的发现。
经过大量的开发(是;顽皮,顽皮),我一直在将rpsec和黄瓜集成到我的应用程序中。我想为我的模型生成rspec存根,并测试我的应用程序单元。我通常能够将相关的迁移移出db / migrate /并运行\'bundle exec rails g \'来重新生成支架,在这种情况下,重新生成rspec存根。这次不行。
<终端>
bundle exec rails g scaffold User email:string ...
updated_at:datetime roles_mask:integer --trace
invoke active_record
The name \'User\' is either already used in your application
or reserved by Ruby on Rails. Please choose an alternative
and run this generator again.
通过暂时在\'config / routes.rb \'文件中的\'devise_for \'行注释,解决了我的问题
config / routes.rb
#devise_for :users
答对了。这并不是Devise唯一一次以“黑魔法”让我惊讶的事情,这并不容易。当然,一旦生成了rspec存根,我就不会对此行发表评论。现在可以编写我的单元测试了!