一部の属性が空でない場合にのみ検証する必要があります。
たとえば、ユーザーはロゴを持っている場合があります。ロードしようとすると、検証が機能するはずです。ロゴなしでユーザーのデータを単に更新する場合、検証をスキップする必要があります。
今私が持っています:
フォームには2つのファイルの選択肢があります。 1つ目-ロゴ、2つ目-アバター。この属性は両方ともユーザーモデルの一部です。ユーザーモデルでは検証があります:
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? }
ただし、許可を使用することをお勧めします。ずっときれい。