2010-04-01 1 views
4

두 테이블 - 제품 및 주문이 있다고 가정 해 봅시다. 간단히하기 위해 한 번에 하나의 제품 만 구입할 수 있으므로 order_items와 같은 조인 테이블은 없습니다. 그래서 관계는 제품에는 많은 주문이 있고 주문은 제품에 속해 있습니다. 따라서 product_id는 Order 테이블의 fk입니다. 두 가지 모델, 하나의 STI 및 유효성 검사

제품 테이블

은 STI입니다 - 서브 클래스가되는으로, B, 사용자 주문 서브 클래스 제품 C가, 두 가지 특별한 검증이 주문 모델 필드 ORDER_DETAILS 및 ORDER_STATUS에 확인해야 C.

. 이 두 필드는 다른 모든 제품 하위 클래스 (예 : A 및 B)에 대해 nil 일 수 있습니다. 사용자의 구매 A와 B가

내 질문이있는 경우 즉, 더 검증이 두 필드에 실행하는 데 필요하지 않습니다 : 내가 주문 모델에서 검증 (? 아마도 사용자 정의)를 쓰기 어떻게

되도록 Order 모델은 Product 서브 클래스 C에 대한 fk_id가 orders 테이블에 저장 될 때 ITS 두 필드 (order_details 및 order_status)에 대한 유효성 검사 만 실행한다는 것을 알고 있습니까?

def validate 
    if product and product.type_c? 
     errors.add(:order_details, "can't be blank") if order_details.blank? 
     # any other validations 
    end 
    end 

또는 뭔가를 그 라인을 따라 :

+0

여기에서 다형성을 사용하는 대안이 있습니까? – keruilin

+0

예 ... 내 편집 내용 다시보기 :) 당신이 정말로 겪은 일이 시작되었습니다. 미래의 질문으로 실제 모델 코드를 포함시키는 것이 더 나을 것입니다. 처음부터 나를 도왔을 것입니다. (그때 다시는 그 곳 모든 곳에서 일어 났을 것입니다. :) 단지 –

+0

예, 당신이라고 생각하지 마십시오! 그것은 나의 원래 prob 진술이었다. 일하는 데 도움을 청합니다. – keruilin

답변

4

의 핵심은 세부 사항을 확인하기 위해 Order 모델의 validate 방법을 추가하는 것입니다. 유형이 validate인지 확인하고 적절한 오류를 추가하십시오. 방금 type_c? 기능을 구성했습니다. 귀하의 Product 모델이 정의되어 있지만 유형을 확인하십시오.

+0

Tony, order_details 및 order_status 필드가 Order 모델에 있으면 여전히 작동합니까? – keruilin

+0

아 죄송합니다 ... 편집을 참조하십시오. –