Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 同时避免`:dependent=>;:销毁`和一个`外键违规:错误`_Ruby On Rails_Rails Activerecord_Model Associations - Fatal编程技术网

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
。不太管用。你能详细解释一下你的解释吗?感谢