更新或删除表格" x"违反外键约束" fk_rails_5a7b40847a"在桌子上" x"

时间:2017-06-21 12:25:58

标签: ruby-on-rails ruby postgresql activerecord

嘿伙计们我正在构建一个rails应用程序(5.1.1),它具有与之相关的帖子和​​评论。

一切似乎都运行得很好,但当我尝试删除有评论的帖子时,我收到此错误:

''' PG :: ForeignKeyViolation:错误:更新或删除表格"帖子"违反外键约束" fk_rails_5a7b40847a"在桌子上"评论" 详细信息:Key(id)=(3)仍然从表"注释"中引用。 :DELETE FROM"帖子"在哪里"原型"。" id" = $ 1'''"

这个错误似乎非常简单,但我对rails和postgresql来说真的很新,所以我正在寻找一些帮助!

3 个答案:

答案 0 :(得分:3)

它取决于您对帖子删除后发表的评论。如果你想在级联上删除它们,例如

post.rb

has_many :comments, dependent: :destroy

答案 1 :(得分:1)

更新Post模型中的以下行,如下所示

has_many :comments, dependent: :destroy 

您必须在dependent: :destroy模型中提及Post。因此,当任何postpost.destroy删除时,它会删除Comment模型的所有相关记录。

希望这能解决您的问题

答案 2 :(得分:0)

这是因为你的数据库中有一个约束 我假设表post_id中的外键comments必须存在于关联表posts中。 这当然是因为您使用rails g model Comment post:references在迁移中指定了外键关系。

您必须指定在删除时如何处理相关模型:

class Post < ActiveRecord::Base
  has_many :comments, dependent: :destroy # destroy associated comments
end

然后在记录中调用方法post.destroy而不是post.delete

有关其他选项,请参阅has_many