0

我在rails应用程序中有以下一对模型。它们使用single table inheritance实施。为什么我的父母回调没有发射?

class Parent < ActiveRecord::Base 
    before_save :callback 

    private 
    def callback 
    puts "executing parent callback" 
    end 
end 

class Child < Parent 
    before_save :callback 

    private 
    def callback 
    puts "executing child callback" 
    end 
end 

我想两个母公司的callback和孩子的callback火每当我保存记录,但我不能让这种行为的工作。目前,当我保存一个Child时,只有该类中定义的回调运行。

0123'表示在操作子类时应自动触发父回调(请参阅“可继承回调队列”一节)。这在我的代码中没有发生。

有谁知道为什么不呢?

+1

他们不会覆盖彼此,因为他们被命名为相同?并应该方法的名称是:parentCallback,:childCallback而不是只是回调? – iouri

+0

啊。好的,所以我从来没有真正使用名为'parentCallback'和'childCallback'的回调来运行代码。当我将代码粘贴到S.O中时,我迅速更改了回调名称。因为我(愚蠢)认为这会让问题更具可读性。 –

+0

在我实际运行的代码中,两个回调函数都被命名为'callback'。我刚刚编辑了这个问题来反映这一点。这就是问题所在!我想这两个名字相同的回调是互相覆盖的。 –

回答

2

你试过这样做吗?方法名称相互覆盖。

class Parent < ActiveRecord::Base 
    before_save :parent_callback 

    private 
    def parent_callback 
    puts "executing parent callback" 
    end 
end 

class Child < Parent 
    before_save :child_callback 

    private 
    def child_callback 
    puts "executing child callback" 
    end 
end 
+0

的工作。谢谢! –

+0

真棒:)很高兴工作。 – iouri

相关问题