2011-12-01 4 views
0

내가 상상 한 상속 문제는 하위 클래스가 수퍼 클래스와 다른 속성을 가지고 있다고 가정합니다. 예를 들어 Person은 수퍼 클래스 일 수 있으며 Driver 하위 클래스입니다. 여기서 DriverPerson에 모두 license_type 필드가 있습니다.Rails 3.1 테이블 상속없는 모델 상속

약간 다른 질문을하고 있습니다. 나는 수퍼 클래스를 가지고 있는데, Entity이라고 부르며, Entityobject_type 필드를 가지고 어떤 유형의 Entity인지 설명합니다. 모든 유형에는 동일한 필드가 있지만 각 유형은 약간 다르게 작동합니다. 예를 들어 add 방법은 Entity 유형에 따라 다릅니다.

내 현재 솔루션은 Entity을 하위 클래스이며, 내가 Entity를 가져올 때마다 (예를 들어, find() 또는 where(..)에), 나는 entity = entity.becomes(eval("Entity#{entity.object_type}"))를 호출합니다. 이것은 추악하고 잘 작동하지 않습니다. 예를 들어 url_forform_for은 이 아닌 Entity<Type>이므로 정의되지 않은 메서드를 호출합니다.

URL 상속, 경로, 양식 및 그 밖의 모든 항목이 설명 된대로 작동하도록 테이블 상속없이 모델 상속을 수행하는 방법은 무엇입니까? 그리고 .becomes(..)으로 전화하는 것을 피할 수있는 방법이 있습니까? 내가하고있는 일은 아주 못생긴 것이다.).

답변

1

저는 Ruby와 Rails에 대해 더 많이 배웠습니다. 좋은 해결책을 찾았습니다. 내 Entity<Type> 클래스를 모듈로 변경하고 lib/에 넣었습니다.

if object_type == "Type1" 
    extend EntityType1 
elsif object_type == "Type2" 
    extend EntityType2 
end 

이 방법은, EntityType1EntityType2에 정의 된 모든 메소드가 새로운 클래스를 필요로하지 않고 Entity 클래스의 범위에서 실행됩니다 다음, 엔티티 클래스에서,이처럼 보이는 after_initialize 콜백이 인스턴스화. 지금까지 솔루션은 잘 작동했지만 몇 일 동안 만 사용해 왔습니다.