ruby-on-rails - 仅在存在时验证属性(仅当用户填写时)

标签 ruby-on-rails ruby validation

只有当某些属性不为空时,我才需要验证它们。

例如,用户可能有一个标志。如果我们尝试加载它 - 验证应该有效。如果我们只是更新没有标识的用户数据,则必须跳过验证。

现在我有:

表格有两个文件可供选择。一是 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/

相关文章:

c# - 有没有办法验证 MVC 2 中传入的 HttpPostedFilebase 文件?

使用 XSD 进行 PHP SimpleXMLElement 验证

javascript - Rails 3 406 尝试使用 format.js 时出现 Not Acceptable 错误,也无法更改内容类型

jquery - 在 fullcalendar.js 的事件中渲染 HTMLS 标签

Ruby 搜索树示例混淆

scala - 是否有可以与组合器组合的最大数量的验证?

ruby-on-rails - Redis 与 Rails 中的类变量

ruby-on-rails - 如何为温度数据集创建平均值?

java - 为什么Jruby不需要 'net/http/server'和gnu.io.PortInUseException错误

ruby-on-rails - 下划线的 NoMethodError