只有在存在的情况下才validation属性(仅当用户填写时)

我只需要validation一些属性,如果他们不是空的。

例如,用户可能有一个标志。 如果我们尝试加载它 – validation应该工作。 如果我们只更新没有徽标的用户数据,则必须跳过validation。

我现在有:

该表格有两个文件的select。 一个标志,第二个头像。 这两个属性都是用户模型的一部分。 在用户模型中有一个validation:

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("...") 

在这种情况下,如果我们尝试创build一个没有select标志和头像的新用户,我们将会有错误(我们的validation)。 我尝试更改validation,并添加“: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 

现在我可以创build用户没有选定的标志和头像,但如果我尝试编辑用户,并尝试上传唯一的标志 – 我有validation错误的头像。 如果我select文件的头像和标志留空白 – 我有validation错误的标志。

如何我可以运行validationony的属性,我想改变?

添加:allow_blank => true ,它应该做你想做的。

一些validation接受选项:allow_blank => true:allow_nil => true

如果失败,请使用:如果条件如下所示:

 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? } 

但我鼓励你使用允许。 更干净。

也许:if => lambda {|attr| attr.present?} :if => lambda {|attr| attr.present?}会有帮助吗?