首页 > 解决方案 > 如何编写自定义验证以防止记录具有所有空属性?

问题描述

我想编写一个 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-railsrubyvalidationactiverecord

解决方案


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

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

推荐阅读