Ruby on rails Rails 3的默认值是什么:dependent-on-has\u-many并属于\u-to
在rails 3中,我知道我可以使用:dependent=>:delete选项强制删除属于并且有很多关系的依赖对象。但是我想知道, 如果不指定:dependent=>,默认行为是什么 干杯,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总是调用 删除记录以
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
,而不是在关系上调用,将不会对关联的模型做任何事情,除非有多个关系指定了一个依赖的行为。(默认设置为保留悬空引用)