有没有办法验证给定模型对象中所有属性的真实存在?或者我是否必须使用presence: true
列出每个属性?
感谢您的帮助。
答案 0 :(得分:5)
要获取所有模型属性的数组,可以使用YourModel.attribute_names
。但是,您无法真正验证所有属性的存在(例如id
,created_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
答案 1 :(得分:1)
您可以使用Array
方法获取.attributes_names
中的所有属性名称。
然后您需要做的就是将array
添加到validates_presence_of
方法。
示例:强>
class Model < ActiveRecord::Base
validates_presence_of attribute_names.reject { |attr| attr =~ /id|created_at|updated_at/i }
end
答案 2 :(得分:0)
是的,您可以在一行中添加所有属性,如下所示:
validates :name, :login, :email, presence: true