1

제목에서 알 수 있듯이, 이것은 의미가 없습니다. 시나리오를 상상해보십시오 :레일즈 추상 클래스 has_many

다음 모델을 가지고 있습니다 : Game, GameTypeChampion. 특정 GameType (MOBA와 같은)의 게임 만 Champion 모델에 대한 has_many 관계를 갖기를 바랍니다. (FPS 등의) 다른 것들은 그렇지 않을 것입니다.

내 첫 번째 경향은 GameTypeMoba 추상 클래스를 만드는 것이 었습니다.이 클래스에서 상속받은 모든 클래스는 속성을 가질 수 있습니다 (예 : 챔피언 포함). 그러나 테이블에 묶여 있지 않은 클래스는 테이블 관계를 가질 수 없기 때문에 이것이 의미가 없다는 것을 알고 있습니다. 더구나, 어떻게 든 그것을 함께 해킹 할 수 있다면 그것은 단지 엿 같은 WET (DRY 반대) 접근법처럼 보인다.

누군가가 에 지저분한 앱 로직이 포함되어 있지 않은 간단한 해결책이 있기를 바랍니다. 이 시점에서도 나는 "지체를 용인하십시오."라고 받아 들일지라도.

+0

'GameType'이'MOBA' 일 때 왜'has_many'를 무시할 수 없습니까? – Mischa

+0

그래, 그 해결책은, 내 건축/디자인의 결함을 지적하기를 바랬다. – anxiety

+1

좋아요,이 방법은 다음과 같습니다. 아키텍처/디자인의 결함은 아키텍처를 필요로하지 않는 아키텍처를 시도한다는 것입니다. – Mischa

답변

0

Mischa가 맞습니다.이 경우에는 수행 할 수있는 것이 더 좋고/깨끗한 것 같지 않습니다. 그리고 레코드의 부분 집합에 대해 불필요한 관계를 갖는 것은 실제로 큰 문제가 아닙니다.

0

레일스 가이드의 "has_many"연관 참조 (http://guides.rubyonrails.org/association_basics.html#has_many-association-reference)를 확인하면 연결 선언에 조건 옵션을 사용할 수 있습니다. 설명서에 나와 예 : 조건 => "MOBA ="와 "게임 타입"의 class_name을 : 당신의 상황에서

class Customer < ActiveRecord::Base 
    has_many :confirmed_orders, :class_name => "Order", 
    :conditions => "confirmed = 1" 
end 

, 나는 당신이 사용하려는 것입니다 가정합니다.

+0

당신이 뭔가있는 것 같아요,하지만': class_name' 매개 변수가': conditions' 매개 변수에 필드를 포함 할 클래스를 기대하고 있다고 생각합니다. – anxiety

+0

고객 : "주문", : 조건 => "확인 된 = 1" 끝 – kries

+0

예. 그러므로, 'has_many : champions, : class_name => "GameType", : conditions => "name = MOBA"'와 같은 것을하면': class_name'으로': conditions'을 정렬하지만'Champion' 모델 나는 생각하지 않는다. – anxiety