Rails验证对象中的所有属性

时间:2015-11-30 14:28:54

标签: ruby-on-rails validation

有没有办法验证给定模型对象中所有属性的真实存在?或者我是否必须使用presence: true列出每个属性?

感谢您的帮助。

3 个答案:

答案 0 :(得分: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

答案 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