2012-05-23 9 views
1

"유형"열이있는 프로젝트 모델이있는 레일스에서 ​​시스템을 구성하려고합니다. 명시 적으로 저장해야하는지 프로젝트 테이블에 문자열로 입력하거나 대신 type_id를 저장해야합니다. 문제는, 타입 모델을 만드는 것이 어리석은 것처럼 느껴집니다. 유형을 만들거나 파괴 할 수 없으며 단순히 고정 된 수의 유형이 있습니다. 그러나 모델을 만들지 않는다면, 생각해 볼 수있는 유일한 방법은 get_name (type_id) 메서드가있는/lib에 Type 클래스를 만드는 것입니다.이 메서드는 총 잔인 함과 비슷합니다.데이터베이스가 필요하지 않은 레일즈 모델 구현

문자열을 저장하기로 결정하면 불필요한 공간을 사용하게되고 유형별 필터링이 이상하게 들릴 것입니다.

의견이 있으십니까?

+4

조심하세요! 열 이름'type'은 단일 테이블 상속 메커니즘을 트리거합니다 (어쩌면 당신이 할 일이 무엇입니까?) – rjz

+0

좋은 생각입니다. 문제가 생깁니다. 그래도 좀 더 구체적인 이름으로 바꿀 수 있습니다. 어느 쪽이든, 내 질문은 여전히 ​​의미합니다. –

답변

1

유형이 고정 세트 인 경우 Project 모델에 숫자 상수를 정의하고이 번호를 projects 테이블의 열에 저장할 수 있습니다.

class Project < ActiveRecord::Base 
    # Project categories are constants 
    CHEAP_PROJECT = 1 
    SOUND_PROJECT = 2 
    GRAPHIC_PROJECT = 3 
    SECRET_PROJECT = 4 

    # Force project_category_id to be a valid category identifier 
    validates :category_id, :inclusion => {:in => 1..4} 

    # At this point you can use the constants 
    # Here an example of a scope to get the secret projects 
    scope :secret_projects, where(:category_id => SECRET_PROJECT) 
end 

하는 중 하나가 될하기 위해 category_id 값을 확인하십시오 : 나는 피하기 위해 열 category_id 전화 여기

예를 들어 (물론 테스트되지 않음) 문제를 as rjz said를 일으킬 것 type 이름을 사용하는 당신이 정의한 일단이 constans가 있으면 Project::SOUND_PROJECT 같은 것을 사용하여 다른 장소에서도 사용할 수 있습니다.

나는 솔루션이 꽤 명확하다고 생각하지만 요구 사항이 변경되면 (항상 변경 ...) 모델을 만들고 이러한 식별자를 유지 관리해야합니다.

+1

좋은 통찰력. 감사! –

+0

당신을 환영합니다;) –