0

난 레일 애플 리케이션에 다음과 같은 모델 쌍을 가지고있어. 그들은 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를 저장할 때 그 클래스에 정의 된 콜백 만 실행됩니다.

Rails docs은 자식 클래스가 작동 될 때 부모 콜백이 자동으로 트리거되어야한다고 말합니다 ("상속 가능한 콜백 대기열"섹션 참조). 이것은 내 코드에서 일어나지 않습니다.

왜 아는 사람이 있습니까?

+1

같은 이름이 붙어있어서 서로 덮어 쓰지 않습니까? 메소드 이름은 parentCallback, : callback 대신 childCallback이어야합니까? – iouri

+0

아. 좋아, 그래서 실제로는'parentCallback'과'childCallback'이라는 콜백 코드를 사용하지 않았습니다. 코드를 S.O에 붙여 넣을 때 콜백 이름을 빠르게 변경했습니다. 왜냐하면 나는 (어리석게) 그것이 더 가독성있는 질문을 만들 것이라고 생각했기 때문이다. –

+0

내가 실제로 달린 코드에서, 두 콜백은 단지'콜백 '으로 명명되었습니다. 나는 그것을 반영하기 위해 질문을 편집했다. 그리고 그게 문제였습니다! 두 개의 동일한 콜백이 서로 덮어 쓰고 있었다고 생각합니다. –

답변

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

관련 문제