【问题标题】:rails test error:"table projectname_test.destroys doesn't exist"rails 测试错误:“表 projectname_test.destroys 不存在”
【发布时间】:2014-07-02 09:07:04
【问题描述】:

我刚开始学习 Ruby on Rails。当我使用rails进行测试时,出现错误: 用户测试#test_the_truth: ActiveRecord::StatementInvalid: Mysql2::Error: Table 'eula_test.destroys' 不存在: SHOW FULL FIELDS FROM destroys 我不知道什么是 eula_test.destroys 以及我应该如何解决这个问题。

【问题讨论】:

  • 这个表你创建了吗?
  • 我应该手动创建这个表吗?这张表的作用是什么,列有哪些?
  • 你能告诉我们你的控制器代码吗?

标签: ruby-on-rails testing rails-activerecord destroy


【解决方案1】:

检查您的迁移文件。在 db/migrate.rb 和 db/shema.rb 上,您可以查看是否有该表。

【讨论】:

  • 我没有那张桌子,但我不记得我也用过那张桌子。我现在该怎么办?
【解决方案2】:

似乎没有人能够回答这个问题,但是根据你得到的错误最好的猜测看起来你需要一个连接表,因为你很可能在你的模型 eula.rb 和测试.rb

所以你需要创建一个迁移:rails g migration CreateEulaTest

然后编辑迁移以包含一个索引,该索引告诉数据库在 eula_test 表中查找要加入的数据。

您需要使用以下内容编辑您的迁移:

 def up 
  create_table :eula_test, :id => false do |t|
   t.integer :eula_id 
   t.integer :test_id 
 end
 add_index(:eula_test, [:eula_id, :test_id]
end
 def down
  drop_table :eula_test
 end
end

注意:此表不需要它自己的 ID,因此 :id => false 此外,add_index 部分是您在 2 个模型之间的外键,它允许数据库知道您正在通过表来建立指令,例如创建和销毁等。

运行 rails db:migrate for rails 5 或更高版本,rake db:migrate

您可能需要检查您的模型以确保您的 has_to_and_belongs_to_many 设置正确。

您很可能错过了本教程的这一部分。有些教程并没有解释为什么要做这些事情,它们只是向您展示代码并让您弄清楚。

【讨论】:

    【解决方案3】:

    rails db:reset 应该修复它:)

    【讨论】:

    • 为什么?添加更多解释会使您的答案更有用。
    • Rails 有一些在后台更新测试数据库的机制。我不能说出确切的细节,但看到,例如rails db:migrate,我的测试数据库结构已更新,或者说,与开发数据库同步。 db:reset也一样。
    • 我不知道 Rails,抱歉。只是想说您可以通过提供更多解释来使您的答案更好。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多