[英]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.