Rails 3变形问题

akp*_*kpb 4 ruby ruby-on-rails scaffold inflector

我在为帆船赛生成脚手架时遇到了问题.我跑的时候

rails g scaffold Regatta name:string start_date:datetime
Run Code Online (Sandbox Code Playgroud)

我得到一个名为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
Run Code Online (Sandbox Code Playgroud)

相同的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.
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一切我能想到的功能,但我一直都会遇到错误.任何有关解决方案或变通方法的建议都将不胜感激!


更新

以下是我尝试过的一些事情:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'regatta', 'regattas'
end
Run Code Online (Sandbox Code Playgroud)

这并没有改变任何东西,所以我尝试了下面的一些选项,其中包括不同的组合无济于事:

 inflect.plural 'regatta', 'regattas'
  inflect.singular 'regattas', 'regatta'
  inflect.singular 'regatta', 'regatta'
Run Code Online (Sandbox Code Playgroud)

更新2

这是我在inflections.rb中使用的代码,一旦我弄清楚我做错了什么:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.plural 'regatta', 'regattas'
  inflect.singular 'regatta', 'regatta'
  inflect.singular 'regattas', 'regatta'
end
Run Code Online (Sandbox Code Playgroud)

希望这将有助于将来的人!

Dav*_*ani 9

我认识到这篇文章很老,但我想我也会贡献我的发现.

经过多次开发,我一直在将rpsec和黄瓜整合到我的应用程序中(是的;顽皮,顽皮).我想为我的模型生成rspec存根并测试我的应用程序单元.我通常能够将关联的迁移从db/migrate /中移出并运行'bundle exec rails g'来重新生成脚手架,在这种情况下,运行rspec stub.这次不行.

<终端>

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.
Run Code Online (Sandbox Code Playgroud)

我的问题通过暂时注释掉'config/routes.rb'文件中的'devise_for'行来解决

配置/ routes.rb中

#devise_for :users
Run Code Online (Sandbox Code Playgroud)

答对了.而这并不是Devise唯一一次让我感到惊讶的是"黑魔法",这一点并不明显.当然,一旦生成了我的rspec存根,我就不会注释该行.现在我要编写单元测试了!