2016-01-22 67 views
1

我使用active_record-acts_as gem来实现多表继承。我的情景:Rails多表继承删除子删除父项

class Vehicle < ActiveRecord::Base 
    actable 
end 

class Plane < ActiveRecord::Base 
    acts_as :Vehicle 
end 

class Train < ActiveRecord::Base 
    acts_as :Vehicle 
end 

每当我创建飞机或火车的情况下,将创建一个相应的车辆,但是,每当我删除一个平面上,相应的车辆行不会被删除。

是否有可能这样做,每当一个孩子被删除,父行也被删除?

+0

您可以尝试使用活动记录before_destroy/after_destroy回调 –

+0

您是否想要在回调方法中手动删除它?我问是否有自动方式... – unknown

+0

看看[选项](https://github.com/hzamani/active_record-acts_as/blob/master/lib/active_record/acts_as/relation.rb# L10)。你应该使用依赖:: destroy –

回答

1

README documentation

acts_as支持所有has_one选项,其中默认值有:
as: :actable, dependent: :destroy, validate: false, autosave: true

所以:

class Vehicle < ActiveRecord::Base 
    actable 
end 

class Plane < ActiveRecord::Base 
    acts_as :Vehicle, dependent: :destroy 
end 

class Train < ActiveRecord::Base 
    acts_as :Vehicle, dependent: :destroy 
end 

我之前建议阅读宝石的文档/时使用它,特别是w母鸡问题/问题出现在它的使用情况。

+0

我没有阅读过文档,在询问最初的问题之前试过了你的代码,但没有成功。以防万一我在回应之前再次尝试,仍然无法正常工作。我删除了一个平面,但在Vehicle上仍然存在一条记录 – unknown

0

愚蠢的错误代表我从一开始。

记录未被删除的原因是因为我在调用Plane.delete而不是Plane.destroy。

问候。