Ruby on rails 同时避免`:dependent=>;:销毁`和一个`外键违规:错误`
我知道,当我的模型中有关联时,我需要向关联中添加一个Ruby on rails 同时避免`:dependent=>;:销毁`和一个`外键违规:错误`,ruby-on-rails,rails-activerecord,model-associations,Ruby On Rails,Rails Activerecord,Model Associations,我知道,当我的模型中有关联时,我需要向关联中添加一个依赖:destroy,例如: 答复.rb: has_many :answer_likes, :dependent => :destroy 以确保当一个对象(例如,答案)被删除时,所有相关对象(答案像)也被删除 这有助于避免此错误(或类似错误): 另一方面,如果我不希望出现此错误,也不希望引用此已删除对象(答案)的关联对象(答案\u likes)也被删除,那么建议采用什么方式构建关联 谢谢。如果使用新定义,则无需使用的多个,尤其是如果不
依赖:destroy
,例如:
答复.rb:
has_many :answer_likes, :dependent => :destroy
以确保当一个对象(例如,答案)被删除时,所有相关对象(答案像)也被删除
这有助于避免此错误(或类似错误):
另一方面,如果我不希望出现此错误,也不希望引用此已删除对象(答案)的关联对象(答案\u likes)也被删除,那么建议采用什么方式构建关联
谢谢。如果使用新定义,则无需使用的多个
,尤其是如果不需要访问主模型中的关联对象
但是,如果试图删除具有关联对象的记录,则默认情况下外键约束会引发错误
您可以通过告诉数据库在删除时应该做什么来避免错误,并将正确的选项传递给调用。如果你通过
on_delete: :nullify
然后数据库将允许删除答案,并将每个答案的外键设置为nil。还有另外两个选项,cascade
和restrict
(这通常是默认设置)。如果使用新定义,则无需使用has\u many
,特别是如果不需要访问主模型中的关联对象
但是,如果试图删除具有关联对象的记录,则默认情况下外键约束会引发错误
您可以通过告诉数据库在删除时应该做什么来避免错误,并将正确的选项传递给调用。如果你通过
on_delete: :nullify
然后数据库将允许删除答案,并将每个答案的外键设置为nil。还有另外两个选项,cascade
和restrict
(这通常是默认设置)。如果使用新定义,则无需使用has\u many
,特别是如果不需要访问主模型中的关联对象
但是,如果试图删除具有关联对象的记录,则默认情况下外键约束会引发错误
您可以通过告诉数据库在删除时应该做什么来避免错误,并将正确的选项传递给调用。如果你通过
on_delete: :nullify
然后数据库将允许删除答案,并将每个答案的外键设置为nil。还有另外两个选项,cascade
和restrict
(这通常是默认设置)。如果使用新定义,则无需使用has\u many
,特别是如果不需要访问主模型中的关联对象
但是,如果试图删除具有关联对象的记录,则默认情况下外键约束会引发错误
您可以通过告诉数据库在删除时应该做什么来避免错误,并将正确的选项传递给调用。如果你通过
on_delete: :nullify
然后数据库将允许删除答案,并将每个答案的外键设置为nil。还有另外两个选项,
cascade
和restrict
(通常是默认设置)。您可以在销毁之前尝试
在回答中模型
before_destroy :detach_associated
def detach_associated
self.answer_likes.update_all(:answer_id => nil)
end
在这种情况下,关联的记录不会被删除,而是孤立的
嗯,我不知道这对大量相关记录的效率有多高您可以在销毁之前尝试
在回答中模型
before_destroy :detach_associated
def detach_associated
self.answer_likes.update_all(:answer_id => nil)
end
在这种情况下,关联的记录不会被删除,而是孤立的
嗯,我不知道这对大量相关记录的效率有多高您可以在销毁之前尝试
在回答中模型
before_destroy :detach_associated
def detach_associated
self.answer_likes.update_all(:answer_id => nil)
end
在这种情况下,关联的记录不会被删除,而是孤立的
嗯,我不知道这对大量相关记录的效率有多高您可以在销毁之前尝试
在回答中模型
before_destroy :detach_associated
def detach_associated
self.answer_likes.update_all(:answer_id => nil)
end
在这种情况下,关联的记录不会被删除,而是孤立的
嗯,我不知道这对大量相关记录的效率有多高谢谢@simone Carletti。我试图将on_delete::nullify
添加到关联的前面,但没有成功。然后我使用它如下:dependent::nullify
。不太管用。你能详细解释一下你的解释吗?谢谢您删除时的\u delete
不是您可以动态配置的关联密钥,它是您在运行迁移时必须使用的选项。请再次阅读我发布的链接。谢谢@simone Carletti。我试图将on_delete::nullify
添加到关联的前面,但没有成功。然后我使用它如下:dependent::nullify
。不太管用。你能详细解释一下你的解释吗?谢谢您删除时的\u delete
不是您可以动态配置的关联密钥,它是您在运行迁移时必须使用的选项。请再次阅读我发布的链接。谢谢@simone Carletti。我试图将on_delete::nullify
添加到关联的前面,但没有成功。然后我使用它如下:dependent::nullify
。不太管用。你能详细解释一下你的解释吗?谢谢您删除时的\u delete
不是您可以动态配置的关联密钥,它是您在运行迁移时必须使用的选项。请再次阅读我发布的链接。谢谢@simone Carletti。我试图将on_delete::nullify
添加到关联的前面,但没有成功。然后我使用它如下:dependent::nullify
。不太管用。你能详细解释一下你的解释吗?感谢