2011-04-19 2 views
1

데이터베이스와 모델 모두에서 열거를 유지 관리하는 명확한 방법을 찾고 싶습니다. 레일즈 모델과 데이터베이스에서 상수 enums

내가 1 또는 푸를 얻기 위해 내가 더 나아가 그래서 내가 푸 :: TYPES.HELLO을 할 수있는 열거 클래스를 작성했습니다

class Foo < ActiveRecord::Base 
    TYPES = {1 => :hello, 2 => :hi} 
end 

유형의 상수 열거 형과 액티브 클래스를 가지고 말 : : TYPES.HI 2를 얻으려고.

조인을 할 수 있도록 데이터베이스에 이러한 유형이 필요합니다. 현재 FooType 모델을 만들고 Foo belongs_to : foo_type을 가지고 있으므로 Foo는 foo_type_id 필드를 갖습니다. 내가 때마다 데시벨 테스트 종자하지 않는

  • 테스트 환경 파괴 : 때문에

    class Foo < ActiveRecord::Base 
        belongs_to :foo_type # 1 -> hello, 2 -> hi 
    end 
    

    그러나이 불편하다. 유형은 상수로 가정되므로 코드에서 직접 사용됩니다. 이것은 내가 새로운 유형을 추가하는 경우

  • , 나는 모든 데이터베이스
  • 에이를 반영 할 필요가 아마 내가 모델로 DB에서 foo_type_ids를 당겨 정적 열거를 할 경우
  • ,이 또한 테스트에서 휴식 가장 큰 고통
  • 각 환경 유형의 코드에서 열거 그냥 코드를 읽을 이외의 아무것도하지 않습니다 갖는

답변

1

나는이 당신이 열거하고 모델에서의 값을 정의 할 수 있습니다 https://github.com/jeffp/enumerated_attribute

에서 enumerated_attribute 보석을 사용했다. Rails/UI 측면 (데이터베이스가 아닌)에서 다루기 쉽도록 디자인되었지만 열거 형에 대해 별도의 모델을 유지 관리하고 일관성을 유지하는 번거 로움을 덜어줍니다.

테스트 환경에서 작동하므로 새 값을 추가 할 때 DB를 업데이트 할 필요가 없으므로 데이터베이스를 시드 할 필요가 없습니다.열거 형 값에 대한 새로운 열을 작성하면 나머지는 젬이 처리합니다. 값을 문자열로 저장하므로 필요한 경우 데이터베이스에서 조작하기가 쉽습니다.

-1

와 시드 할 필요가있다. 오히려 정수 (개발자를위한 가독성을하지 않는)하는 것보다, 당신은 그 값

TYPES = {1 => :hello, 2 => :hi} 
을 표현하기 위해 문자열의 종류를 오는 사용하십시오

나는 당신이 'belongs_to'일반 클래스 내부 (같은 AR 관계를 사용할 수있는 것 같아요 비 AR)

나는 당신이 두 테이블

입니다 필요 생각

테이블 - 다음

foos 
     id 
     type 
     foo_type_id 

foo_types 
     id 
     foo_type 

U는 AR

,617을 가질 수 있습니다
class Foo < ActiveRecord::Base 
    belongs_to :foo_type 
end 

class FooType < ActiveRecord::Base 
    has_many : foos 
end 

정적 열거자를 제외하고 DB 솔루션을 사용할 경우 옵션이 없지만 각 env에 유형을 추가하십시오.

HTH

환호

사 미라

+0

이러한 클래스는 ActiveRecords 여야합니다. 내가하고 싶은 일은 모델에 정의 된 상수와 db (정적 열거 자없이) 사이의 일관성을 유지하는 것입니다. – phillee