2012-04-23 15 views
0

레일즈 3.2.2 어플리케이션에 루비 1.9.3이 있고 타입을 포함해야하는 다수의 has_many 연관을 다루고 있습니다. 예 :레일에서 타입 클래스

  • 사용자는 많은 항공기를 가지고 있습니다. 항공기는 특정 유형 (Cessna 172)입니다.
  • 사용자에게 많은 라이센스가 있습니다. 라이센스는 특정 유형 (개인 파일럿 라이센스)입니다.
  • 라이센스는 has_many 등급입니다. 등급은 특정 유형 (단일 엔진 피스톤 등급 등급)입니다.

내 모든 문제의 이름은 이러한 클래스의 이름입니다. 현재 사용자의 연관은 Aircraft, LicenseRating이지만 여전히 유형 클래스의 이름을 지정해야합니다. 나는 처음에 그들에게 AircraftType, LicenseTypeRatingType이라고 이름을지었습니다. 그러나 이것은 나에게 냄새가났습니다.

지금 내가 너무 내 타입 클래스가 지금 Types::Aircraft, Types::LicenseTypes::Rating 명명 된 전용 모듈 Types 이러한 모든 유형의 클래스를 가지고 있지만 난이 나를 의심 지원 주어진 길 아래에 문제가 향하고있는 경우 확실하지 않다 Rails에서 네임 스페이스 지정하기.

이런 종류의 문제에 대한 규칙이나 표준이 있습니까?

업데이트 :

항공기 유형의 목록이 정기적으로 업데이트되기 때문에, 나는이 데이터베이스에 있어야합니다. 라이센스 유형 및 등급은 자주 변경되지 않지만 추가, 변경 또는 제거해야하는 경우 데이터베이스에 있어야합니다. 이런 종류의 규칙은 클래스 자체에서 정적으로 정의됩니다.

답변

2

형식이 모델과 너무 밀접하게 연관되어 있으므로 형식을 클래스 메서드로 모델에 넣을 수 있습니다. 뭔가 같은 :

class Aircraft < ActiveRecord::Base 
    def self.XTypes 
    ['Cessna 172','Cessna 152','Boeing 747'] 
    end 
end 

그냥 레일 단일 테이블 상속, 사실 '유형', 심지어는 속성 이름을 유지하는 좋은 것, 위험,하지만 수 있음을 예약 한 바와 같이, '유형을'사용하지 않는 최소한 DRYer 코드의 가능성을 열어주는 유형을 가진 모든 모델에 대해 동일한 모델을 사용하는 모든 모델에 대해 select 요소를 만드는보기 도우미와 같이 XTypes가있는 모든 모델간에 코드를 공유 할 수 있습니다. XType을가집니다.

<%= f.select 'xtype', Aircraft.XTypes %> 

XTypes의 목록이 큰, 그들은 수정/추가/삭제에있는 경향, 당신은 아마에 이르렀 고려해야합니다

그래서, 일반적으로는 다음과 같이 XTypes을 사용하십시오 별도의 모델을 만들고 has_one 관계로 연결 시키십시오. 그러나 상당히 정적이라면 위의 방법이 유용 할 것입니다.

는 UPDATE :

나는 단일 테이블 상속 티켓 것 같아요, 그 중 하나 또는 단순한 has_one 관계.하지만 당신은 하나의 개체로 모든 종류의 응축 할 것 같은데, 그래서 당신은 할 수 있습니다 STI

class mytype < ActiveRecord::Base; end 
class AircraftType < mytype; end 
class LicenseType < mytype; end 
당신은 당신의 MYTYPE 모델에서 '형식'라는 문자열 속성을 추가하고 그것을 기입해야

값은 'AircraftType'또는 'LicenseType'입니다. 지금 당신은 당신이 라이센스 기록을 편집하는 즉 경우에, 당신의 모든 유형을 수용 할 수있는 하나 개의 모델을 가지고, 당신은 LicenseTypes의 선택 요소, 당신은 할 수 원하는 :

<%= f.select 'type', LicenceType.all().map {|t|, [t.id, t.description] } 

당신이 항공기를 편집 한 경우 :

<%= f.select 'type', AircraftType.all().map {|t|, [t.id, t.description] } 

이 기본 MYTYPE 모델은 빠른 응답에 대한 속성 '설명'

+0

안녕 브래드, 감사가 가정! 아마 사과해야 겠어. 나는이 유형들이 데이터베이스에 있기를 바 띾다. (항공기 유형이 다른 것보다 많기 때문에) 내 수수께끼가된다. 원래 질문을 업데이트했습니다. – Laurens

+0

OK, 대답을 업데이트하겠습니다. – RadBrad

+0

Brad에게 감사드립니다! 그냥 일어나서 실행하고 내 솔루션에 이것을 매우 선호, 잘 작동합니다! – Laurens

관련 문제