2013-08-21 2 views
1

User입니다. has_manyProfile입니다. 나는 belongs_toProfileReport 모델도 가지고 있습니다.레일은 다른 테이블에 따라 속성의 유일성을 확인합니다.

한 명의 사용자에게 보고서가 하나만 있는지 확인하려면 어떻게해야합니까? 비슷한 것

class Report 
    validate_uniqueness_of profile_id, scope: :user 
end 

위대한,하지만 물론 작동하지 않습니다. (소유권 체인을 뒤섞어서 사용자 필드를 보고서에 첨부하고 싶지 않습니다.)

+0

사용자 정의 유효성 검증을 사용해야합니다. 레일즈는 모델 범위 밖에서 유일성의 유효성을 인정하지 않습니다. – techvineet

+0

안녕하세요, techvineet : 어떻게해야합니까? – AdamNYC

답변

1

맞춤 검증을 구현하는 방법에 대한 아이디어 만 제공하면됩니다. 이것을 확인하십시오

class Report 
    validate :unique_user 

    def unique_user 
     if self.exists?("profile_id = #{self.profile_id}") 
      errors.add(:profile_id, "Duplicate user report") 
     end 
    end 
end 
0

맞다면 사용자의 모든 프로필에 동일한 보고서가 표시됩니다. 맞습니까? 그렇다면 프로파일이 사용자에게 속한다는 것을 의미합니다. 그렇다면 왜 그렇게 모델링하지 않습니까? 예 :

class User 
    has_many :profiles 
    has_one :report 
end 

class Profile 
    belongs_to :user 
    has_one :report, through: :user 
end 

class Report 
    belongs_to :user 
end 
+0

각 프로필의 보고서가 다릅니다. – AdamNYC

관련 문제