Rails验证对象中的所有属性

And*_*wJL 3 validation ruby-on-rails

有没有一种方法可以验证给定模型对象中所有属性的真实存在?还是我必须列出每个属性presence: true

谢谢你的帮助。

AbM*_*AbM 5

要获取所有模型属性的数组,可以使用YourModel.attribute_names。但是,您不能真正验证所有属性(例如idcreated_at)的存在,因为在创建记录时,在验证期间这些属性将为空白。

class YourModel < ActiveRecord::Base
  NON_VALIDATABLE_ATTRS = ["id", "created_at", "updated_at"] #or any other attribute that does not need validation
  VALIDATABLE_ATTRS = YourModel.attribute_names.reject{|attr| NON_VALIDATABLE_ATTRS.include?(attr)}

  validates_presence_of VALIDATABLE_ATTRS
end
Run Code Online (Sandbox Code Playgroud)

  • 另外,代替维护两个常量,您可以简单地通过做一个数组差异来获取可验证字段的数组:`YourModel.attribute_names-%w(id created_atmodified_at)`。 (3认同)