Rails db:种子未知属性

时间:2016-06-16 05:09:50

标签: sql ruby-on-rails database transactions

这是一个问题。

我有一个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中看到此列

1 个答案:

答案 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()