2010-01-14 4 views
0

일부 기능을 레일즈로 이식하고 있으며 주석을위한 기존 테이블로 작업하고 있습니다.레일 "유형"열이없는 단일 테이블 상속

기본적으로 두 가지 유형의 주석이 있습니다 - (photo_id 열이 사진의 ID로 설정) 내가 단일 테이블 상속 타입 필드를 추가하여 잘 작동있어

의견 (photo_id 열이 null) 및 사진 댓글 프로필 테이블에 있지만, 형식 필드없이 작동하는 단일 테이블 상속을 얻는 방법이 있는지 궁금하네요. Rails API 문서에 따르면 "테이블에 정의 된 유형 열이 없으면 단일 테이블 상속이 트리거되지 않습니다.이 경우 차별화를위한 특별한 마법없이 일반 하위 클래스처럼 작동합니다 그 (것)들 사이에서 또는 적당한 유형을 발견을 가진 재 장전하십시오. "

필자가 모델을 사용자 정의하여 photo_id를 기준으로 유형을 결정할 수있는 방법이 있는지 궁금합니다 (데이터베이스 열을 사용하는 대신 nil이거나 정수 값을 가짐) t는해야한다.) 어떤 아이디어?

답변

1

댓글 모델이 많이 다르지 않다면, 나는 하나의 테이블 상속에 전혀 신경 쓰지 않을 것입니다. 그냥 추가 :

# to Comment model 
belongs_to :photo 
belongs_to :profile 

# to Profile model 
has_many :comments 

# to Photo model 
has_many :comments 

그런 : 당신이 (당신이 프로필과 관련된 사진을 언급하는 경우가 발생할 수 있습니다 가정) 모두 photo_id했다 및 설정 PROFILE_ID 경우

@photo.comments # will return comments associated with photos 
@profile.comments # will return comments associated with profiles 

문제가있을 수 있으므로 당신 polymorphic associations

has_many :comments, :conditions => "photo_id is not null" 

또 다른 방법을 (내가 더 잘 생각)을하지만 당신은 당신의 SQL 테이블을 수정해야합니다 : 당신은 프로필 모델에서 변경할 수 있습니다.

+0

감사! 이것은 제 목적을 위해 완벽하게 작동합니다. 필자는 실제로 처음에는이 접근법을 사용했지만 일부 행에 대해 photo_id와 profile_id를 모두 설정했기 때문에 혼란스러워졌으며': conditions' 옵션을 인식하지 못했습니다. 다시 한 번 감사드립니다! – Coomer

-1

나는 이것을 할 수 없다고 생각합니다. 그러나 테이블 대신보기를 사용하여 활성 레코드를 속여서 id가 설정된이 마법 속성을 설정하는 데이터베이스 함수를 작성하는 것이 하나의 방법입니다.

그러나 결국에는 열을 추가하는 것이 훨씬 더 쉽습니다.

관련 문제