2016-12-08 2 views
0

이것은 냄새가 심한 코드이며 여러 위치에서 별칭 메서드가 사용되었습니다. 이제 실제 레일 (rails) .destory 메서드를 호출하여 책의 모든 종속 된 종속을 삭제하려고합니다. - 별칭 메서드를 무시하고 .destory AR 메서드를 호출 할 수있는 방법이 있습니까?레일 - 오버라이드 별칭 방법

class Books < ActiveRecord::Base 
    def disable 
    self.is_active = false 
    save! 
    end 
    alias_method :destroy, :disable 
end 

답변

1

편집증 모드를 구현하려는 시도였습니다. 참으로 냄새 나는 코드. destroy 메서드를 덮어 쓰고 더 이상 (쉽게) 원래 구현을 호출 할 수 없습니다. 하지만 원래 구현을 저장할 수 있습니다!

class Book < ActiveRecord::Base 
    alias_method :ar_destroy, :destroy 
    alias_method :destroy, :disable 
end 

지금 당신은 AR의 destroy 구현을 호출 할 book.ar_destroy를 호출 할 수 있습니다. 별칭을 없애는 것이 더 나은 방법입니다. 당신이> = 2.2 루비가있는 경우

+0

나는 dataset.run_callbacks (: destroy)를 생각해 냈습니다. dataset.delete! . 그러나 당신의 대답을 훨씬 좋아했습니다. 별칭을 제거하는 것. ..hmm 나는 알고있다 - 매우 지루한 작업 - app의 in-out을 모르고있다. Anyhows 고마워요! –

+0

에 대한 좋은 추가 '쉽게':) – Ilya

+0

@Ilya : 예, 답을보고 나서 추가했습니다. :) –

2

, 당신은 Method#super_method를 사용할 수 있습니다

book.method(:destroy).super_method.call 

을이 경우에, 당신은 AR 방법 대신 별명을 부를 것이다. 빠른 수정이지만 코드를 리팩토링하는 것이 좋습니다.