2012-11-20 2 views
2
class Upload < ActiveRecord::Base 
    has_many :comments 
end 

class Gallery < Upload 
    has_many :images 
end 

class MusicAlbum < Upload 
    has_many :audio_tracks 
end 

예상대로 작동합니까? 갤러리 및 MusicAlubm 모델이 상속 할 것인가 : 부모로부터의 연관성에 대한 의견 (업로드)과 자신의 모델 추가?레일 STI - 하위 클래스의 맞춤 연결

+1

기본 클래스의 모든 연결을 선언하는 한 가지 이유는 업로드를로드 할 때 모든 연결을 열망 할 수있는 능력입니다. 즉, 나는 Upload.all을 포함 할 수있다 : [: comments, : images, : audio_tracks]''' –

답변

4

예, 모델은 클래스 일 뿐이며 상속 된 경우 부모 클래스에서 모든 메소드를 가져옵니다. 그래서, 모두 GalleryMusicAlbumUpload 모델의 후손,

좋은 (이 모델 STI를 지원하는 type 열을 가질 필요가있는) 그들은 has_many :comments 관련이있을 것이다, 둘 다 uploads데시벨 테이블에서 데이터를 얻을 것이다 간단한 STI 예제를 찾을 수 있습니다 here

+0

나는 상속하는 방법에 대해 걱정하지 않는다. 나는 모든 연관이 기본 클래스에서 정의되고이 클래스의 연관에만 반영 될 것으로 기대하는 레일스와 같은 문제를 두려워합니다. 이 예에서는 하위 클래스의 연결을 사용자 지정하지 않습니다. "진짜"프로젝트에서 그렇게 해본 적이 있습니까? 문제없이 작동 했습니까? –

+0

연관은 Rails에서 생성되고 특정 방식으로 작동하는 메소드 목록 일뿐입니다. 예, 확실히 작동합니다. 연관성이 선언 된 곳과 상관없이 모델 자체 또는 상위에 있습니다. 실제로 모듈로 선언하고 해당 모듈을 클래스에 포함시킬 수도 있습니다. – alony

+0

모듈에 대한 흥미로운 점은 클래스를 포함하는 컨텍스트에서이를 선언하는 "포함 된"콜백 또는 "확장 된"콜백에서 수행하는 것입니다. 모듈에 연관 메소드를 정의하여 콜백이없는 모듈에 포함시킬 수있는 방법을 알고 있습니까? 정의 된 방법 이상의 것이 있습니다. 그렇지 않으면 Model.reflections는 어떻게 작동할까요? –

관련 문제