Nice programing

속성이있는 경우에만 유효성 검사 (사용자가 입력 한 경우에만)

nicepro 2020. 12. 3. 19:42
반응형

속성이있는 경우에만 유효성 검사 (사용자가 입력 한 경우에만)


비어 있지 않은 경우에만 일부 속성의 유효성을 검사해야합니다.

예를 들어 사용자에게 로고가있을 수 있습니다. 로드하려고하면 유효성 검사가 작동합니다. 로고없이 사용자 데이터 만 업데이트하는 경우 유효성 검사를 건너 뛰어야합니다.

지금 나 한테있어:

양식에는 두 개의 파일이 있습니다. 하나-로고, 두 번째-아바타. 이 두 속성은 모두 사용자 모델의 일부입니다. 사용자 모델에서 유효성 검사가 있습니다.

validates_preference_of :logo_file_name, :message=>I18n.t("...")
validates_format_of :logo_file_name, :with=>/\.(jpeg|jpg|png|gif)$/i, :message=> I18n.t("...")
validates_preference_of :avatar_file_name, :message=>I18n.t("...")
validates_format_of :avatar_file_name, :with=>/\.(jpeg|jpg|png|gif)$/i, :message=> I18n.t("...")

이 경우 로고와 아바타를 선택하지 않고 새 사용자를 만들려고하면 오류 (인증)가 발생합니다. 변경 유효성 검사를 시도하고 다음과 같이 ": on => : update"를 추가합니다.

validates_preference_of :logo_file_name, :message=>I18n.t("..."), :on => :update
validates_format_of :logo_file_name, :with=>/\.(jpeg|jpg|png|gif)$/i, :message=> I18n.t("..."), :on => :update
validates_preference_of :avatar_file_name, :message=>I18n.t("..."), :on => :update
validates_format_of :avatar_file_name, :with=>/\.(jpeg|jpg|png|gif)$/i, :message=> I18n.t("..."), :on => :update

이제 선택한 로고와 아바타없이 사용자를 생성 할 수 있지만, 사용자 편집을 시도하고 로고 만 업로드하면 아바타의 유효성 검사 오류가 발생합니다. 아바타 및 로고 파일을 선택하면 비워 두십시오-로고 유효성 검사 오류가 있습니다.

변경하려는 속성에 대한 유효성 검사를 어떻게 실행할 수 있습니까?


추가 :allow_blank => true하면 원하는 작업을 수행 할 수 있습니다.


어쩌면 :if => lambda {|attr| attr.present?}도움이 될 것입니다?


일부 유효성 검사에서는 :allow_blank => true또는 :allow_nil => true.

이것이 실패하면 다음과 같이 : if 조건을 사용하십시오.

validates_format_of :avatar_file_name, 
 :with=>/\.(jpeg|jpg|png|gif)$/i, 
 :message=> I18n.t("..."), 
 :on => :update,
 :if => lambda{ |object| object.avatar_file_name.present? }

하지만 허용을 사용하는 것이 좋습니다. 훨씬 더 깨끗합니다.

참고 URL : https://stackoverflow.com/questions/7868067/validate-attribute-only-if-it-present-only-if-user-fill-in-it

반응형