development

Rails에서 사용자 지정 유효성 검사 메서드 호출

big-blog 2020. 12. 7. 20:14
반응형

Rails에서 사용자 지정 유효성 검사 메서드 호출


방금 레일을 2.3.4로 업그레이드했고 유효성 검사를 통해 이것을 발견했습니다. 이름이있는 단순한 모델 Company가 있다고 가정 해 보겠습니다. 그것에 아무것도. 내 자신의 유효성 검사를 실행하고 싶습니다.

class Company < ActiveRecord::Base

  validate :something


  def something
    false
  end

end

이 경우 모델 저장이 실제로 작동합니다. validate ()를 재정의하고 false를 반환하면 똑같은 일이 발생합니다. 내 유효성 검사가 거짓을 반환하는 더 복잡한 모델에서 이것을 발견했지만 객체는 여전히 저장 중입니다 ... 본질적으로 빈 모델에서 시도해 보았고 동일한 것을 적용했습니다. 내가 놓친 새로운 관행이 있습니까? 내 오래된 레일 코드 중 일부에서는 그렇지 않은 것 같습니다.


validate메서드 를 사용할 때 유효성 검사가 실행됩니다 . 그러나 rails는 반환 된 값에 의존하지 않습니다.

유효성 검사 오류가 있는지 여부에 따라 다릅니다. 따라서 모델이 유효성을 검사하지 않을 때 오류를 추가해야합니다.

def something
    errors.add(:field, 'error message')
end

또는 오류가 필드와 관련이없는 경우 :

def something
    errors.add(:base, 'error message')
end

그러면 오류가 있기 때문에 모델이 저장되지 않습니다.


유효성 검사와 콜백이 혼동되고 있습니다.

객체에 오류가 있으면 유효성 검사가 실패하는 것으로 간주되며 유효성 검사가 반환하는 내용은 중요하지 않습니다. 콜백은 객체에 오류를 추가하더라도 false를 반환하면 실패합니다.

Rails는 유효한 호출을 사용합니까? 유효성 검사 결과를 확인하지 않는 저장 호출에서.

편집 : Rails는 validate :method콜백으로 취급 하지만 유효합니까? 여전히 결과를 확인하지 않고 객체에 추가 한 오류 만 확인합니다.

나는이 행동이 전혀 바뀌지 않았다고 생각하지만 내가 틀릴 수있다. 나는 전에 거짓을 반환하는 유효성 검사를 작성한 적이 없다고 생각합니다.


참고로 errors.add_to_base('error message')3 번 레일에서 더 이상 사용되지 않고 다음으로 대체되었습니다.

errors[:base] << "Error message" 

또는

errors.add(:base, "Error message")

참고 URL : https://stackoverflow.com/questions/1611887/calling-custom-validation-methods-in-rails

반응형