Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 Rails 3的默认值是什么:dependent-on-has\u-many并属于\u-to_Ruby On Rails_Ruby On Rails 3_Default Value_Has Many_Belongs To - Fatal编程技术网

Ruby on rails Rails 3的默认值是什么:dependent-on-has\u-many并属于\u-to

Ruby on rails Rails 3的默认值是什么:dependent-on-has\u-many并属于\u-to,ruby-on-rails,ruby-on-rails-3,default-value,has-many,belongs-to,Ruby On Rails,Ruby On Rails 3,Default Value,Has Many,Belongs To,在rails 3中,我知道我可以使用:dependent=>:delete选项强制删除属于并且有很多关系的依赖对象。但是我想知道, 如果不指定:dependent=>,默认行为是什么 干杯, Hajo说,“当没有给出选项时,行为是在销毁记录时不处理相关记录。”也就是说,删除或销毁一个对象不会删除或销毁它所属或有许多对象的对象。有很多用法:null策略,它会将foreign设置为null。对于has\u many:通过它将使用delete\u all 因为有很多,destroy总是调用 删除记录以

在rails 3中,我知道我可以使用:dependent=>:delete选项强制删除属于并且有很多关系的依赖对象。但是我想知道,

如果不指定:dependent=>,默认行为是什么

干杯,
Hajo说,“当没有给出选项时,行为是在销毁记录时不处理相关记录。”也就是说,删除或销毁一个对象不会删除或销毁它所属或有许多对象的对象。

有很多用法:null策略,它会将foreign设置为null。对于has\u many:通过它将使用delete\u all

因为有很多,destroy总是调用 删除记录以便运行回调。然而,删除将 或者根据 :dependent选项,或者如果未提供:dependent选项,则它将 遵循默认策略。默认策略是:取消(设置 外键为nil),除了has_many:through,其中默认值为 策略是删除所有(删除加入记录,而不运行其 回调)

--


不确定你到底属于什么,也无法在文档中找到任何东西。我会尽快做一些挖掘并更新答案。

在Rails 3中,默认的
:dependent
值是
:nullify
,它将外键设置为nil

默认策略是
:为常规
的多个
设置null
。此外,这仅在源反射是
所属的
时才起作用

资料来源:

Rails 4中仍然是这种情况

但是,
delete
delete\u all
将根据
:dependent
选项指定的策略执行删除,或者如果未给出
:dependent
选项,则将遵循默认策略。默认策略是
:null
(将外键设置为
nil
),除了
有许多:通过
,其中默认策略是
删除所有
(删除连接记录,而不运行其回调)

资料来源:


另请参阅源代码文档:

如果您不指定此项,您最终将看到被遗弃的孩子为他们的父母哭泣。这没什么大不了的,但它会让你的数据库充满(无用的)数据谢谢你指出:)我希望rails尝试使用db查询来加载依赖对象,如果它们的ID字段没有正确地为空的话。这意味着,搜索不存在的记录会浪费CPU和DB时间。所以我想知道为什么rails在默认情况下没有做任何事情……你确定情况仍然如此吗?我刚刚体验到默认行为不是使外键无效。我必须显式地设置
dependent::nullify
,以使其为null。我使用的是ruby 2.0.0和Rails 4.0.0。你知道
has_one
的默认值是什么吗?这不再是真的:
默认策略是什么都不做(将外键保留在父ID设置中),除了has_many:to,默认策略是delete_all(删除连接记录,而不运行它们的回调).
很遗憾,这是不正确的。引用的文档指的是在一个有很多关联(如
blog.posts.delete\u all
)的网站上调用delete/delete\u all。在模型上调用
blog.destroy
,而不是在关系上调用,将不会对关联的模型做任何事情,除非
有多个
关系指定了一个
依赖的
行为。(默认设置为保留悬空引用)