2017-12-08 8 views
0

부모 모델에서 상속 한 모델의 수를 확인하고 고유하게 유지하려고 시도합니다.RoR STI 모든 상위 모델 인스턴스에 대한 각 유형의 단일

그래서 나는 또한 그래서 이것에 대한 하나의 테이블 상속을 사용하고

User has_many :parents 
Parent belongs_to :user 

있습니다

rails g model Type1Parent --parent=Parent 

전반적인 내가 3 가지 유형이 있으므로 Type1Parent, Type2Parent, Type3Parent.

모든 사용자 반드시 내가이 작업을 수행하려고하면 예를 들어

type1parent = user.type1parents.new 
type1parent.save #=> OK! 

있도록하지만는 각 유형의 하나이 다시

type1parent = user.type1parents.new 
type1parent.save #=> Error: User already has a type1parents 

뿐만 아니라 을 만들 수 동일한 사용자의 type2parent.

그래서 모든 사용자에 대해 각 유형의 단일 존재를 어떻게 확인할 수 있습니까?

+1

당신은에 고유성 유효성 검사를 추가 할 수 있습니다 parents 테이블에 type, user_id에 고유 인덱스를 추가 @MrYoshiji에 의해 제안 또한 validates :type, uniqueness: { scope: :user_id }

사용자 모델을 생성 한 다음, 사용자에게'autosave'를 사용하도록 관계 부모를 만든다 (그래서 그것은 사용자의 검증을 유발할 것이다). 'parents' 테이블의'(type, user_id)'에 유일한 인덱스를 생성 할 것을 강력히 권장합니다. 그래서 어떤 점에서이 유일성을 다시 확인하지 않았다면 DB는 여전히이 규칙을 보장 할 것입니다. – MrYoshiji

답변

1

이 당신의 상위 모델에 고유성 검증 범위 추가

+0

위대한 작품, 감사합니다 :), 당신은 아마 @ MrYoshiji 언급 한 부분에 정교한 수 있을까요? – frcake