[英]Ruby on Rails : Error trying to generate a model : Name already in use
我是 Ruby on Rails 的新手。 我正在嘗試使用命令生成模型
rails 生成模型 電影標題:文本 年份:整數 評分:整數 描述:文本
但我收到錯誤:
invoke active_record The name 'Movie' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.
我真的很想保留電影這個名字。 我也嘗試過以下刪除表 - 但該表不存在於數據庫中
sqlite> drop table Movie;
Error: no such table: Movie
我不確定如何修復此錯誤或導致此錯誤的原因。 對此的任何幫助都會很棒。 提前致謝。
您可以通過運行rails destroy model Movie
來恢復。 這將刪除之前生成的模型、遷移、測試和夾具。
根據 Rails 約定,表名應該是movies
。 嘗試:
sqlite> drop table movies;
並確保您沒有模型類(在models/movie.rb
)。
案例一:緩存問題
我得到以下錯誤::
The name 'Activityflow' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.
如果您在初始行中看到以下消息,則在運行rails g時。 可能是緩存問題:
warning: previous definition of CALLBACK_CAMPAIGN_NAME was here
Running via Spring preloader in process 98806
invoke active_record
解決方案是殺死 spring,它將釋放緩存。
查找spring的進程ID
$ ps -ef | grep spring
501 82388 82384 0 2:21PM ?? 66:34.87 spring app | insurance | started 16 hours ago | development mode
501 82384 1 0 2:21PM ttys005 0:00.84 spring server | insurance | started 16 hours ago
殺死進程 例如:82384 在上述情況下
$ kill -9 82384
然后當你再次運行rails g命令時; Spring 將以新內容運行/啟動,並且模型創建成功。
Running via Spring preloader in process 99237
invoke active_record
create db/migrate/20200518021818_create_activityflows.rb
create app/models/activityflow.rb
invoke rspec
create spec/models/activityflow_spec.rb
案例二:模塊問題
我得到以下錯誤::
The name 'Workflow' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.
問題是我正在使用 gem gem 'workflow', '~> 2.0.2'它創建模塊名稱 Workflow 並且不允許生成名為 Workflow 的模型。
所以,當你使用任何 gem並且任何 gem中的模塊名稱與模型名稱匹配時要小心。
Simple way to check if module name exist is::
$ bin/rails c
[4] pry(main)> Workflow
=> Workflow
[5] pry(main)> Workflow.class
=> Module
希望這對任何面臨類似問題的人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.