Rails db:种子未知属性

use*_*314 4 sql database transactions ruby-on-rails

这里有一个问题。

我有一个 Rails 项目。当我想清除数据库并用一些测试数据填充它时,我运行:

rake db:drop db:create db:migrate db:seed
Run Code Online (Sandbox Code Playgroud)

我有一个错误:

NoMethodError: undefined method login for #<User:0x007fecf46afe80>

当我单独运行时:

rake db:drop db:create db:migrate
rake db:seed
Run Code Online (Sandbox Code Playgroud)

一切顺利。

另外,我在db/seeds.rb中的所有操作都包含在ActiveRecord::Base.transaction块中。

我必须在db/seeds.rbUser.reset_column_information的顶部添加

rake db:drop db:create db:migrate db:seed

在职的。

我之前没有遇到同样的错误reset_column_information。有人知道为什么会发生这种情况吗?

PS:运行后,db/schema.rbrake db:drop db:create db:migrate中存在“缺失”列,我可以直接在 DB 中看到该列

Tob*_*obi 5

来自文档

公共重置列信息()

重置有关列的所有缓存信息,这将导致它们在下一个请求时重新加载。

此方法最常见的使用模式可能是在迁移中,当创建表后您想用一些默认值填充它时

您的db:migrate任务更改表中的列信息,但在命令完成之前,users这些更改似乎没有正确写入文件。您的任务会查看它需要的列是否存在,但这会显示之前的架构,除非您将其放在单独的命令中或在它之前运行。db/schema.rbrakedb:seeddb/schema.rbdb:migraterakereset_column_information()