2010-11-27 7 views
0

Rails 3.0.3 모델에서 합성 가상 속성이 주어지면 컴포넌트 속성의 오류가 복합 속성에 자동으로 배치 될 수 있습니까? 예를 들어 :다중 열 속성 레일

validates_presence_of :first_name 
validates_presence_of :last_name 

def name 
    "#{first_name} #{last_name}" 
end 

def name=(name) 
    first_name, last_name = name.split 
end 

을 제공합니다 :

@model.errors[:name] = @model.errors[:first_name] + @model.errors[:last_name]

이 단순화 된 예입니다 있습니다 및 구성 요소가 복합에 대한 새로운 검증 방법에 속성에서 나는 쉽게 검증을 이동할 수 없습니다 속성.

다른 예는 크기 (attachment_size)에 대한 유효성 검사가 '첨부 파일'속성에 배치 된 Paperclip 보석입니다. 어떤 아이디어?

감사합니다.

답변

0

는 함께 종료 :

after_validation do 

    self.errors[:first_name].each do |message| 
    self.errors.add(:name, message) 
    end 

    self.errors[:last_name].each do |message| 
    self.errors.add(:name, message) 
    end 

    self.errors.delete(:first_name) 
    self.errors.delete(:last_name) 

end 
0

개인적으로 개인적으로 first_namelast_name 필드에 '일반적인'유효성 검사를 수행하지 않았습니다. 대신, 사용자 지정 유효성 검사기의 수 손에 그것을 떠날 것이다 :

validate :name_is_valid 

def name_is_valid 
    if first_name.blank? || last_name.blank? 
    errors.add(:name, "You must specify both your first and last name") 
    end 
end 
+0

안녕 라이언. 미안하다, 나의 예를 명확히하기 위해 위의 것보다 훨씬 더 복잡하다. 저는 실제로'Paperclip'이 첨부 파일의 크기, 첨부 파일 형식 등을 검증하는 방법에 더 가깝게 찾고 기본 속성에 모든 유효성 검사를 추가합니다 (그러나 나는 원본을 읽지 못했습니다). 위의 내용을 더 명확하게 업데이트하겠습니다. –