Rails 3 拐点问题

Posted

技术标签:

【中文标题】Rails 3 拐点问题【英文标题】:Rails 3 Inflection Problem 【发布时间】:2011-09-12 02:33:56 【问题描述】:

我在为帆船赛生成脚手架时遇到问题。当我跑步时

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

希望这对将来的人有所帮助!

【问题讨论】:

你是怎么修改文件的? 【参考方案1】:

我知道这篇文章已经过时了,但我想我也会贡献我的发现。

经过大量开发后,我一直在将 rpsec 和 cucumber 集成到我的应用程序中(是的;调皮,调皮)。我想为我的模型生成 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 存根,我就取消了对该行的注释。现在可以开始编写我的单元测试了!

【讨论】:

两年多后仍然相关。这也帮助了我,谢谢。【参考方案2】:

鉴于错误消息指出Regatta 已在您的应用程序中使用(Rails 显然没有保留它),我猜Regattum 模型仍然存在。

我建议销毁脚手架并重试。听起来,一旦在应用程序中定义了一个词,Rails 就有一个内置的保护机制来防止改变变形。因此,抛出这个错误是为了防止在这种情况下出现意外行为。

【讨论】:

我破坏了脚手架——所以没有模型、控制器或视图——而且变形器仍然没有运气。我也从未做过rake db:migrate,所以也没有数据库表。我正在把头发拉到这个上面。 你是对的。我打电话给我的申请赛舟会,这显然是把它扔掉了。感谢您为我指明正确的方向!

以上是关于Rails 3 拐点问题的主要内容,如果未能解决你的问题,请参考以下文章

拐点怎么求 计算方法是啥

高数中曲线拐点的计算

性能--曲线拐点模型分析

echarts折线图个性化填充线条拐点样式

拐点检测常用算法介绍

nx二次开发怎么判断选择的曲线是不是有缝隙