只有在存在的情况下才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?}
会有帮助吗?