添加人们可能会收到此错误的另外两个可能原因。
首先,您一直在更改名称,但旧名称仍然存在,因为这是一个缓存问题。
其次,这可能是与您安装的 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,它会释放缓存。
查找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
CASE II:: 模块问题
我得到以下错误::
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