Ruby on rails 在beforeSave或beforeDelete中处理循环引用的标准方法
假设在我的parse.com数据中,我有一个Family类,这些家族有一个作为Child类成员的子类数组。还可以说孩子有一个指向其家庭的后向指针,并且家庭缓存了一些关于其孩子的数据,如长子的名字 我希望使用beforeSave和beforeDelete尽可能多地维护完整性。例如,在删除一个孩子之前,我想将该孩子从其家庭中删除,我可能需要更新该家庭的长子。那很好,但我还想,在删除一个家庭之前,删除该家庭的孩子 这就是我关心的问题:如果在删除一个族时,我删除了所有的子项,如果在删除每个子项时,我需要操纵该子项的族,并重复保存它,我是否会因为在删除时尝试更新而失败 在beforeSave/beforeDelete钩子中,是否有一些标准规则可以应用于我能做和不能做的事情Ruby on rails 在beforeSave或beforeDelete中处理循环引用的标准方法,ruby-on-rails,database,parse-platform,Ruby On Rails,Database,Parse Platform,假设在我的parse.com数据中,我有一个Family类,这些家族有一个作为Child类成员的子类数组。还可以说孩子有一个指向其家庭的后向指针,并且家庭缓存了一些关于其孩子的数据,如长子的名字 我希望使用beforeSave和beforeDelete尽可能多地维护完整性。例如,在删除一个孩子之前,我想将该孩子从其家庭中删除,我可能需要更新该家庭的长子。那很好,但我还想,在删除一个家庭之前,删除该家庭的孩子 这就是我关心的问题:如果在删除一个族时,我删除了所有的子项,如果在删除每个子项时,我需要
我在parse.com中遇到了这个问题,但是我可以看到同样的问题如何在rails项目中发生这是一个涉及单一责任原则的问题。如果您删除了一个子对象,并且希望在此之后更新该家族的长子对象,那么子对象不应该知道您正在更新,因此您可能希望在删除子对象时使用服务类 另一方面,当删除族时,只需将
相关
选项设置为:destroy
如您所见,在删除子模型后,您始终可以在服务类中执行任何操作,而无需担心会影响其他模型的回调,因为理想情况下,子模型在创建/更新/删除时不应更新其他模型
示例服务类如下所示
class ChildDeleter
def initialize(child)
@child = child
end
def process_destroy
child.destroy
update_eldest
end
private
attr_reader :child
def update_eldest
# add code here to update the eldest member of the family
end
end
# in your controller
def destroy
child = Child.find(params[:id])
ChildDeleter.new(child).process_destroy
end
谢谢这是有道理的。也许我可以这样概括:使用delete/save钩子来更改指向的对象,使用applogic来更改指向您的对象。