【问题标题】:How do I write a custom validation that prevents a record from having all empty attributes? [duplicate]如何编写自定义验证以防止记录具有所有空属性? [复制]
【发布时间】:2018-06-18 17:42:16
【问题描述】:

我想编写一个 Active Record 验证,当用户在表单中没有输入任何内容时会引发错误。假设用户有年龄和姓名属性,那么如果他们不输入年龄或不输入姓名就可以了,但不应该同时输入两者。所以我想要这样的东西:

class User < ActiveRecord::Base
  validate :not_all_empty

   def not_all_empty
     if name.blank? && age.blank?
       errors.add (XXXX)
     end
   end
 end

【问题讨论】:

  • 你应该将验证与模型分离

标签: ruby-on-rails ruby validation activerecord


【解决方案1】:

使用.attributes 返回的哈希并检查其值,跳过由 ActiveRecord 填充的字段 - 时间戳和 id。

def not_all_empty
  if attributes.except('id', 'created_at', 'updated_at').values.all?(&:blank?)
    errors.add ('XXXX')
  end
end

【讨论】:

  • 奇怪,这并不能阻止我在我的应用程序中创建空白记录。
  • 我希望 created_atupdated_at 已经设置,因此在您运行验证时会出现。
  • @spickermann 感谢您指出这一点,当然时间戳和 id 应该在这里省略。
【解决方案2】:

:allow_blank 选项类似于 :allow_nil 选项。如果属性的值为空白,此选项将使验证通过?例如 nil 或空字符串。

class User < ApplicationRecord
  validates :name, :age, allow_blank: true
end

Documentation 在这里!

【讨论】:

  • 谢谢,我知道“验证”,但在我的情况下,属性都是可选的,只要至少填写一个属性,无论是哪一个。
  • 请阅读文档中的“2.10 缺席、3.1 :allow_nil、3.2 :allow_blank”。我希望这些“助手”和“选项”能帮助您解决问题。
  • @LoganX 你现在已经允许它们都是空白的,不幸的是这是当前的问题
  • [stackoverflow.com/questions/2823628/…这篇文章可能对你有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多