只有当某些属性不为空时,我才需要验证它们。
例如,用户可能有一个标志。如果我们尝试加载它 - 验证应该有效。如果我们只是更新没有标识的用户数据,则必须跳过验证。
现在我有:
表格有两个文件可供选择。一是 Logo ,二是头像。 这两个属性都是用户模型的一部分。在用户模型中有验证:
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("...")
在这种情况下,如果我们尝试创建一个没有选择 Logo 和头像的新用户,我们将会出错(我们的验证)。我尝试更改验证并添加“: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
现在我可以在不选择 Logo 和头像的情况下创建用户,但是如果我尝试编辑用户并尝试仅上传 Logo - 我有头像验证错误。如果我为头像和 Logo 选择文件留空 - 我有 Logo 验证错误。
如何只对我想更改的属性运行验证?
最佳答案
添加 :allow_blank => true
并且它应该做你想做的事。
关于ruby-on-rails - 仅在存在时验证属性(仅当用户填写时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7868067/