当我在 Rails Ruby 中 运行 rake test 时出错
Error when I run rake test in Ruby on Rails
当我尝试 运行 在 ROR 中对我非常简单的应用程序进行测试时出现错误。我正在上在线课程,我有一个非常简单的数据库,它有两个表:posts
(带 title
和 body
)和 comments
(带外键:post_id
和 body
。当我 运行 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`
如有任何帮助,我们将不胜感激。谢谢。
当您删除 table 中的一行时,如果主键在另一个 table 中被引用,则会发生此错误。您可以在外键定义中包含 ON DELETE CASCADE
(在其中定义另一个 table 引用主键的位置),或者在执行删除之前添加另一个删除语句以删除引用主键的行你目前正在做的声明。
将此添加到您的 Post
模型中:
has_many :comments, dependent: :destroy
这将在您销毁 Post
模型时销毁相关评论。所以你不会得到 ConstraintException
.
您可以找到有关 Rails 协会的更多信息 here。
当我尝试 运行 在 ROR 中对我非常简单的应用程序进行测试时出现错误。我正在上在线课程,我有一个非常简单的数据库,它有两个表:posts
(带 title
和 body
)和 comments
(带外键:post_id
和 body
。当我 运行 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`
如有任何帮助,我们将不胜感激。谢谢。
当您删除 table 中的一行时,如果主键在另一个 table 中被引用,则会发生此错误。您可以在外键定义中包含 ON DELETE CASCADE
(在其中定义另一个 table 引用主键的位置),或者在执行删除之前添加另一个删除语句以删除引用主键的行你目前正在做的声明。
将此添加到您的 Post
模型中:
has_many :comments, dependent: :destroy
这将在您销毁 Post
模型时销毁相关评论。所以你不会得到 ConstraintException
.
您可以找到有关 Rails 协会的更多信息 here。