簡體   English   中英

Rails 3 拐點問題

[英]Rails 3 Inflection Problem

我在為 Regatta 生成腳手架時遇到問題。 當我跑

rails g scaffold Regatta name:string start_date:datetime

我得到一個名為 regattum 的 model 和一個名為 regatta_controller 的 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

相同的公共/樣式表/腳手架.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

希望這將有助於將來的人!

我承認這篇文章很舊,但我想我也會貢獻我的發現。

經過大量開發后,我一直在將 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”行解決了我的問題

配置/路由.rb

#devise_for :users

答對了。 而這並不是 Devise 唯一一次讓我驚訝於不那么明顯的“黑魔法”。 當然,一旦生成了我的 rspec 存根,我就取消了該行的注釋。 現在開始編寫我的單元測試了!

鑒於錯誤消息表明Regatta已在您的應用程序中使用(它顯然不是 Rails 保留的),我猜Regattum model 仍然存在。

我建議破壞腳手架並重試。 聽起來,一旦應用程序中已經定義了一個詞,Rails 就有一個內置的保護機制來防止改變變形。 因此,拋出這個錯誤是為了防止在這種情況下出現意外行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM