2010-11-30 2 views
2

콘텐츠를 관리하기 위해 구축중인 간단한 앱에서 데이터를 구조화하는 방법에 대해 이전에 질문했습니다. 대답은 Single Table Inheritance을 보았습니다. 그리고 나는 그것이 티켓이 될 것이라고 생각합니다.: 유형 필드는 단일 테이블 상속에서 어떻게 채워 집니까?

필자는 꽤 많은 예제를 읽었지만, 항상 빠져있는 것처럼 보이지만 실제로는 : type 컬럼이 실제로 어떻게 채워지 는가? 사용자가 유형을 선택할 수 있도록 드롭 다운이있는 양식 필드를 포함합니까?

STI가 현재 작동하는 방식 (유형 필드가 클래스 이름을 가짐)을 완전히 이해한다고 생각하지만 여전히 매우 기본적인 것 (그리고 아마도 매우 분명하지만 누락 된 부분)이 누락되었습니다. 누군가 나를 채울 수 있습니까? "사진"

id 
type 
name 
desc 

그리고 다른 유형은, "사이트"가 "블로그"것 :

나는 콘텐츠 테이블과 같이 있습니다.

답변

6

"사이트", "블로그", "사진"정보가 모두 내용에 저장되어 있다고 추측합니다. Content.new으로 개체를 시작할 때 입력란에 값을 할당하지 않았습니다.

그러나 당신은 실제로 다음 자동 MODEL_NAME를 할당 Site.new 또는 Site.create 부산물 "콘텐츠"모델에서 상속 된 "사이트"에서 모든 클래스, "블로그"또는 "사진"을 시작하는 경우 (이 Site을 문자를 구분에서) 형식 필드에서

마찬가지로 Blog.new을 입력하면 블로그 등의 형식 열에 할당됩니다.

+0

기본적으로 STI 방문에 대한 자세한 내용을 알고 싶은 경우 : 당신이 * * 표시 서브 클래스 중 하나의 객체를 저장할 때 형식 필드가 자동으로 채워집니다. 당신이 수퍼 클래스 (당신의 경우에는 내용)를 저장한다면 그것은 생각하지 않은 채 남아 있어야한다. –

+0

@ Paul 당신은 올바른 길을 가고 있습니다 :-) –

1

@jyoseph 예, 당신은 틀림 없습니다. "사이트", "블로그", "사진"등 유형을 보유 할 수있는 새로운보기 및 편집보기를 드롭 다운에 추가 할 수 있습니다. 당신의 내용에 다음

def content_type 
    return ["Site", "Blog", "Photo"] 
end 

하고 다음과 같이 당신은 또한 당신의 응용 프로그램 도우미 파일에 도우미를 할 수 있습니다/new.html.erb 당신은

<p> 
    <%= f.label :type %><br /> 
    <%= f.select :type, content_type %> 
</p> 

, 이것은 작동 할 수 그것을 시도 할 수 있습니다.

그냥 경우에 사람이 my Blog

관련 문제