2011-12-29 2 views
2

저는 현재 ActiveRecord :: Base를 확장하는 모델을 많이 보유하고 있습니다."저장"확장 방법 ActiveRecord에 대한 방법?

이러한 모든 모델의 경우 일부 기능을 추가하여 save! 메서드를 확장하려고합니다. 예를 들어,

def save! 
    begin 
    super 
    rescue 
    # additional exception handling logic 
    end 
end 

OOP 방식으로이 작업을 수행 할 수있는 이상적인 방법은 무엇입니까

?

ActiveRecord (MyActiveRecord)를 서브 클래 싱하고 서브 클래스에서 위의 코드를 사용했습니다. 그런 다음 서브 클래스를 모든 모델에 대한 부모 클래스로 사용했습니다. 그런 다음 ActiveRecord는 myapp_test.my_active_records 테이블을 찾습니다.

똑같은 것을 달성하는 모듈을 사용하면보다 우아한 방법이 있습니까?

+0

설명대로 정확하게 할 것입니다. –

+0

나는 더 명확해야한다 - OOP 구조는 어떻게 생겼을 까? – deruse

+0

무슨 뜻인가요? –

답변

1

당신이 추상적으로 클래스를 표시하는 경우 :

class Foo < ActiveRecord::Base 
    self.abstract_class = true 
end 

은 당신이 그것에서 하위 클래스와 레일은, FOOS 테이블을 찾고 가지 않을 것이다. 아마 더 의미가 콜백 ( around_save, around_update 등)의 집합이 이미있다 -이 특별한 경우 그래도 저장 덮어 쓰기하지 않을에서

.

save 메소드를 겹쳐 쓰는 경우에도 덮어 쓴 저장 메소드를 모듈에 넣고 해당 모듈을 필요한 클래스에 포함 시키면 더 효과적 일 수 있습니다.

module MySave 
    def save! 
    super 
    rescue 
    ... 
    end 
end 

class MyClass < AR::Base 
    include MySave 
end 
관련 문제