这是一个问题。
我有一个Rails项目。当我想清除我的数据库并用一些测试数据填充它时,我运行:
rake db:drop db:create db:migrate db:seed
我有一个错误:
NoMethodError: undefined method login for #<User:0x007fecf46afe80>
当我单独跑步时:
rake db:drop db:create db:migrate
rake db:seed
一切都很好。
db / seeds.rb 中的所有操作都包含在ActiveRecord::Base.transaction
块中。
我必须在 db / seeds.rb 的顶部添加User.reset_column_information
才能生成
rake db:drop db:create db:migrate db:seed
的工作。
没有reset_column_information
之前我没有遇到过相同的错误。有人知道为什么会这样吗?
PS:运行rake db:drop db:create db:migrate
后, db / schema.rb 中有“缺失”列,我可以直接在DB中看到此列
答案 0 :(得分:3)
来自docs:
reset_column_information()public
重置所有缓存的信息 关于列,这将导致它们在下一个重新加载 请求。
此方法最常见的使用模式可能是a 迁移,在创建表后,您想要填充它 带有一些默认值
您db:migrate
任务更改了users
表中的列信息,但看起来这些更改未正确写入db/schema.rb
文件,直到rake
cammand结束。您的db:seed
任务会查看db/schema.rb
以查看其所需的列是否存在,但这会显示db:migrate
之前的架构,除非您将其放在单独的rake
中命令或您在它之前运行reset_column_information()
。