여기에 문제가 있습니다. 사용자 모델, 주문 모델 및 주소 모델이 있다고 가정 해 보겠습니다.레일 : 연결시 필드 유효성 검사
class User < ActiveRecord::Base
belongs_to :address, :foreign_key => :address_id, :class_name => "Address"
end
class Order < ActiveRecord::Base
belongs_to :address, :foreign_key => :address_id, :class_name => "Address"
end
class Address < ActiveRecord::Base
attr_accessible :email, :address
end
이제 사용자 모델에서 주소 모델의 전자 메일 필드를 확인하고 싶습니다.
하지만 Order 모델에서 주소 모델의 주소 필드 만 유효성을 검사하고 싶습니다.
나는이 시도했다 :
class User < ActiveRecord::Base
belongs_to :address, :foreign_key => :address_id, :class_name => "Address"
validate :address_fields
def address_fields
self.address.errors.add 'email' unless self.address.email.present?
end
end
그것은 콘솔에서 작업을 수행하지만 단순한 형태의 오류가 표시되지 않으며 표시되지 않습니다.
제대로 할 생각이 있으십니까?
감사합니다. 두 가지 제안은 약간 지저분한 것 같지만 나에게 아이디어를주었습니다. 주소 모델 인 OrderAddress와 UserAddress에 대해 두 개의 서브 클래스를 갖는 방법. 유일한 차이점은 검증 일 것입니다. 그게 효과가 있니? – bymannan
당신은 그렇게 할 수 있습니다 - 레일즈는 당신이 [단일 테이블 상속] (http://api.rubyonrails.org/classes/ActiveRecord/Base.html#class-ActiveRecord::Base-label-Single)을 사용하여 그렇게하고 싶습니다. + 테이블 + 상속) -하지만 나는 여전히 옵션 1을 선호합니다. STI를 사용하여 DB 수준의 제약 조건을 추가하는 것이 더 어려울 것이며, 데이터를 확인하고 그것이 괜찮은지 아닌지 판단하는 것이 더 어렵습니다. –