2009-10-28 4 views
2

MTI 솔루션을 구현하기 시작했으며 기본적인 질문이 있습니다. 3 가지 실제 모델 - SMSNotifications, EmailNotifications, TwitterNotifications가 있으며 알림 하위 클래스입니다. 내 코드에서 때로는 Notifications.find(:all)라고 말하고 싶기 때문에 결과 집합을 생성 시간별로 정렬 할 수 있습니다. 그런 다음 하위 클래스를 기반으로 작업을 수행하려고합니다. Notifications.find(:all)을 작성하고 Rails가 서브 클래스 테이블을 살펴보고 결과를 결합하는 방법은 무엇입니까? 현재 Rails는 내 MTI 디자인에 위배되는 물리적 인 알림 테이블을 가지고 있다고 생각합니다.Rails 다중 테이블 상속 질문

대신 STI를 사용해야한다는 가능성도 고려하고 있습니다. 행당 10 개의 빈 열을 가질 수 있지만 모든 알림을받는 데 각 알림 유형에 대한 쿼리가 필요한 경우 큰 문제가 될 수 있다고 생각합니다.

감사합니다.

답변

1

예. 각 유형에 대해 별도의 쿼리가 필요합니다. 이것이 dealbreaker라면 STI 또는 이전 질문에서 옹호 된 혼합 모델 접근 방식을 선택해야합니다.

+0

덕분에 다시 응답 마이크에 대한 :

rails g model notification notification_type:string notification_id:integer <other columns> rails g model email_notification <columns> class EmailNotification < ActiveRecord::Base acts_as :notification end .... 

은 다음 원하는 코드는 다음과 같은 수 있습니다. 나는 STI가 잘 풀릴 것이라고 생각한다. 지금 해보고 ... – Tony

0

이 목적을 위해 하위 클래스가 특정 모델 (X)과 다형성 연관을 갖도록 할 수 있습니다. 콜백 after_initialize를 편집하여이 특정 모델 X의 항목 하나를 생성시 각 하위 클래스와 연결할 수 있습니다. 이 방법으로 언급 된 다형성 연관의 대상 (X)에서 찾기를 수행 할 수 있습니다.

0

최근 레일스에서 ​​다중 테이블 상속과 클래스 상속을 구현하는 유망한 프로젝트를 포크했습니다. 며칠 동안 신속한 개발, 수정, 주석 달기 및 문서화 작업을 거친 후이를 레일즈 용 CITIER 클래스 상속 및 테이블 상속 Embedding으로 다시 릴리스했습니다.

모든 알림을 요청하여 필요한 작업을 수행 할 수 있어야한다고 생각하지만 올바른 모델을 반환합니다. 당신은

Notification.all().each do |n| 
    if n.class == 'EmailNotification' 
    #Do something 
    end 
end 

처럼 뭔가를 할 심지어 루트 알림 클래스에서 함수를 정의하고 다른 뭔가를 반환하는 서브 클래스에서 오버로드한다면.

그것을 봐주는 고려 : http://peterhamilton.github.com/citier

을 내가 너무 유용하게 찾을 수있다! 나는 (그런데) 문제와 테스트, 코드 정리 등의 커뮤니티를위한 도움을 환영 할 것입니다! 나는 이것이 많은 사람들이 인정할만한 것임을 압니다.

그러나 제가 말씀 드렸듯이 정기적으로 업데이트해야합니다. 하루가 갈수록 향상되고 발전하고 있습니다.