Mat*_*teu 12 ruby-on-rails ruby-on-rails-4
我试图使用依赖::破坏但没有成功.
让我们举一个简单的例子.我用以下内容创建一个简单的应用程序:
rails g model parent
rails g model child parent:references
Run Code Online (Sandbox Code Playgroud)
将以下行添加到parent.rb
has_many :children, dependent: :destroy
Run Code Online (Sandbox Code Playgroud)
我在rails console(rails c)中进行了以下测试
p = Parent.create!
c = Child.create!
c.parent = p
c.save
#check association
Child.first == Child.first.parent.children.first
p.delete
#This should return 0
Child.count == 0
Run Code Online (Sandbox Code Playgroud)
而Child.count返回1.
我错过了什么?
谢谢
Aru*_*hit 19
如果将:dependent
选项设置为:
:destroy
,当对象被销毁时,#destroy
将在其关联对象上调用.:delete
,当对象被销毁时,将直接从数据库中删除其所有关联对象,而无需调用其#destroy
方法.根据您的设置,您必须这样做p.destroy
.
该:dependent
选项可以具有不同的值,用于指定删除的完成方式.有关更多信息,请参阅有关此选项的文档,了解不同的特定关联类型.如果没有给出选项,则在销毁记录时,行为是对关联的记录不执行任何操作.
For has_many
,destroy
并且destroy_all
将始终调用destroy
要删除的记录的方法,以便运行回调.但是delete
,delete_all
将根据选项指定的策略进行删除:dependent
,或者如果没有:dependent
给出选项,则它将遵循默认策略.默认策略是:nullify
(将外键设置为nil),has_many :through
默认策略除外delete_all
(删除连接记录,不运行其回调).
delete
在ActiveRecord派生对象上调用该方法将发出直接DELETE
语句执行数据库,跳过任何ActiveRecord回调和配置,如dependent: destroy
.
我相信你想要这个destroy
方法.
您还可以在数据库中设置外键并将其设置为在删除时级联,这可能是有意义的,具体取决于您的需要.
归档时间: |
|
查看次数: |
8651 次 |
最近记录: |