在Active Record模型中级联的问题

时间:2014-11-14 12:06:11

标签: ruby activerecord

我的应用程序中有这些活动记录模型

class Artist < ActiveRecord::Base
   has_many :albums, :dependent => :delete_all, autosave: true
end

class Album < ActiveRecord::Base
   attr_accessor :album_artist
   has_many :tracks, :dependent => :delete_all, autosave: true
   has_many :covers, :dependent => :delete_all, autosave: true
   belongs_to :artist
end

class Track < ActiveRecord::Base
   belongs_to :album
end

class Cover < ActiveRecord::Base
   belongs_to :album
end

我正在尝试,在我的应用程序中,当我删除一个艺术家,他的专辑,结果,他的专辑的曲目和封面,全部被删除,在一个级联反应。

今天实施的方式,当我删除艺术家时,只删除了相册,在我的数据库中保留了孤儿记录。

我做错了吗?

1 个答案:

答案 0 :(得分:0)

而不是:dependent => :delete_all您需要配置:

:dependent => :destroy_all

因为delete将直接从数据库中删除所有关联的对象而不调用它们的destroy方法(什么打破了级联)。

您可能需要阅读http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference

中的4.1.2.4