모델이 유효성 검사 오류를 포착한다고 가정 해 봅시다. 일반적으로이 오류는 컨트롤러가 처리하지만 모델에 의해 자동으로 처리 할 수 있습니까?레일스에서 모델 유효성 검증 오류를 복구 할 수 있습니까?
가 실질적으로 내가 각 Note
에 대한 고유 ID uid
을 생성 할 모델은 다음과 같습니다
class Note < ActiveRecord::Base
validates_uniqueness_of :uid
# ... some code to generate uid on after_initialize
end
를 내가 가진 가장 가까운입니다
class Note < ActiveRecord::Base
validates_uniqueness_of :uid
# ... some code to generate uid on after_initialize
after_rollback :repair
protected
def repair
if self.errors[:uid].size > 0
self.uid = generate_uid
end
self.save # Try again
end
end
내 솔루션과 함께 즉각적인 문제 : (1) 모델 인스턴스에 여전히 컨트롤러에서 볼 수있는 오류가 있습니다. 오류를 제거하는 방법을 모르겠습니다. (2) 수리 방법은 재귀 적이다.
나는 이런 식으로 가지 않을 것이다. 이전/이후 필터 또는 유효성 검사 중에 모델을 다시 저장하는 것은 문제의 훌륭한 처방입니다. –
@ErezRabih는 맞습니다. 실제 uuid 생성기를 사용하는 것 외에도, 고유 한 제약 조건으로 안전이 실패한 경우 다시 시도하는'''save_with_repair'''와 같은 추가 메서드를 만들 것이라고 생각합니다. – phoet