添加其他两个可能的原因人们可能会收到此错误。
首先,您一直在更改名称,但旧名称仍然存在,因为这是一个缓存问题。
其次,这可能是与您安装的 gem 的命名冲突。因此 gem 已经在使用您要使用的名称。
案例一::缓存问题
我收到以下错误::
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的进程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