pro*_*int 60 ruby validation ruby-on-rails
如果它们不是空的,我只需要验证一些属性.
例如,用户可以具有徽标.如果我们尝试加载它 - 验证应该有效.如果我们只是更新没有徽标的用户数据,则必须跳过验证.
我现在有:
表单可以选择两个文件.一个 - 徽标,第二个 - 头像.这两个属性都是User模型的一部分.在用户模型中,有一个验证:
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("...")
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果我们尝试创建没有选择徽标和头像的新用户,我们将会出现错误(我们的验证).我尝试了更改验证并添加":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
Run Code Online (Sandbox Code Playgroud)
现在我可以创建没有选择徽标和头像的用户,但如果我尝试编辑用户并尝试上传只有徽标 - 我有头像的验证错误.如果我选择文件的头像和徽标留空 - 我有徽标验证错误.
我如何运行验证ony我想要更改的属性?
mig*_*mba 10
一些验证接受选项:allow_blank => true或 :allow_nil => true.
如果失败,请使用:if condition,如下所示:
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? }
Run Code Online (Sandbox Code Playgroud)
但我鼓励你使用allow.更清洁.