【问题标题】:Rails db:seed unknown attributeRails db:种子未知属性
【发布时间】:2016-06-16 05:09:50
【问题描述】:

这是一个问题。

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

【问题讨论】:

  • 请出示您的控制器和型号
  • 我也有同样的问题和型号User

标签: sql ruby-on-rails database transactions


【解决方案1】:

来自docs

reset_column_information() 公开

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

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

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

【讨论】:

  • 感谢您的回答。这听起来合乎逻辑。但为什么会发生呢?为什么以前没有发生过?
  • 为什么会这样? - 看我的回答。为什么以前没有发生? - 我不能说,因为你没有提供任何关于“之前”的信息。从以前到现在,您的代码或环境发生了什么变化?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多