【问题标题】:Rails 3 'test the truth' unit test failing after migrations mess-upRails 3“测试真相”单元测试在迁移混乱后失败
【发布时间】:2013-02-22 12:54:56
【问题描述】:

在 0.074964 秒、13.3398 次测试/秒、0.0000 次断言/秒内完成测试。

  1) Error:
test_the_truth(UserTest):
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'user_id' in 'field list': INSERT INTO `tickets` (`status`, `assignee`, `created_at`, `updated_at`, `id`, `project_id`, `user_id`) VALUES ('MyString', 1, '2013-02-22 12:40:19', '2013-02-22 12:40:19', 980190962, 64810937, 64810937)
    /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `query'
    /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `block in execute'

我生成/搭建了模型和所有东西。 特殊的部分是我不记得表中有一个 user_id 列。 此外,schema.db 和所有迁移也没有这样的东西。 我的 工作区 中没有这样的字符串 (user_id) rails 我的专栏应该怎么命名?

显然数据库中有一个列这样的东西,但它以某种奇怪的混乱方式得到了修复。

附:如果我禁用与此表相关的固定装置,一切都很好。

发生了什么,rails 从哪里读取此列名,因为显然它不是来自我的工作区,也不是来自我的数据库或测试数据库。所以它可能将它存储在某个地方?有什么办法可以解决这个烂摊子吗?

【问题讨论】:

  • 您的 Ticket 装置中有它吗?如果是删除该字段并尝试再次运行测试。

标签: ruby-on-rails ruby ruby-on-rails-3 unit-testing rails-activerecord


【解决方案1】:

我在 SO 中询问之后的一分钟,我自己找到了答案,在之前的几个小时一无所获。这总是发生在我身上。

答案正是 Rubyman 所评论的 - 应修改固定装置以删除任何遗留信息!但这有点微妙——我的灯具中确实没有“user_id”列/字符串,因为我的工作区中没有它。但是,当我使用“belongs_to”和“has_many”时,它不会在模型和任何地方命名为“user_id”,它只会被命名为“user”。所以我在fixture中搜索并找到了一个'user'字段,不得不将其删除以修复SQL中生成的错误'user_id'列名。

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-05
    • 2012-05-22
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多