【问题标题】:Error when I run rake test in Ruby on Rails在 Ruby on Rails 中运行 rake 测试时出错
【发布时间】:2017-08-24 18:14:47
【问题描述】:

当我尝试在 ROR 中对我非常简单的应用程序运行测试时遇到错误。我正在网上学习一门课程,我有一个非常简单的数据库,它有两个表:posts(带有titlebody)和comments(带有ForeignKey:post_idbody。当我运行时rake test我收到以下错误:

Error: PostsControllerTest#test_should_destroy_post:
ActiveRecord::InvalidForeignKey: SQLite3::ConstraintException: FOREIGN
 KEY constraint failed: DELETE FROM "posts" WHERE "posts"."id" = ?
     app/controllers/posts_controller.rb:57:in `destroy'
     test/controllers/posts_controller_test.rb:43:in `block (2 levels) in <class:PostsControllerTest>'
     test/controllers/posts_controller_test.rb:42:in `block in <class:PostsControllerTest>'


bin/rails test test/controllers/posts_controller_test.rb:41

....

Finished in 12.539965s, 1.1164 runs/s, 1.2759 assertions/s. 14 runs,
16 assertions, 0 failures, 1 errors, 0 skips`

任何帮助将不胜感激。谢谢。

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2


【解决方案1】:

当您删除主键在另一个表中引用的表中的行时,会发生此错误。您可以在外键定义中包含ON DELETE CASCADE(您可以在其中定义另一个表引用主键的位置),或者在执行当前正在执行的删除语句之前添加另一个删除语句以删除引用主键的行。

【讨论】:

    【解决方案2】:

    将此添加到您的 Post 模型中:

    has_many :comments, dependent: :destroy
    

    当您销毁 Post 模型时,这将销毁关联的 cmets。所以你不会得到ConstraintException

    您可以找到有关 Rails 关联的更多信息here

    【讨论】:

      猜你喜欢
      • 2015-08-05
      • 1970-01-01
      • 2012-11-23
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多