Ruby on rails Rails验证对象中的所有属性

Ruby on rails Rails验证对象中的所有属性,ruby-on-rails,validation,Ruby On Rails,Validation,是否有方法验证给定模型对象中所有属性的真实存在性?或者我必须用presence:true列出每个属性吗 谢谢您的帮助。是的,您可以在一行中添加所有属性,如下所示: validates :name, :login, :email, presence: true 要获取所有模型属性的数组,可以使用YourModel.attribute\u名称。但是,您无法真正验证所有属性(例如id,在处创建的属性)的存在,因为在创建记录时,这些属性在验证期间将为空 class YourModel < Act

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


谢谢您的帮助。

是的,您可以在一行中添加所有属性,如下所示:

validates :name, :login, :email, presence: true

要获取所有模型属性的数组,可以使用
YourModel.attribute\u名称
。但是,您无法真正验证所有属性(例如
id
处创建的属性)的存在,因为在创建记录时,这些属性在验证期间将为空

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
classyourmodel
您可以使用
.attributes\u names
方法获取
数组中的所有属性名称


然后,您所要做的就是将这个
数组添加到
验证方法的存在性

示例:

class Model < ActiveRecord::Base
  validates_presence_of attribute_names.reject { |attr| attr =~ /id|created_at|updated_at/i }
end
类模型
还有其他方法可以全部完成吗?我得到了
验证:顺序,:诊断,:后平片,:周长,:ap,:ml,:额区,:顶叶侧位,:耳位,:扫描文件,:传输名称,:修改,:主模式,:上开,:侧开,:裂位,存在:true
。键入所有属性都很烦人。仔细考虑这一点并不优雅,最终您可以使用上面建议的属性数组。就我个人而言,我坚持这一点,因为它是直截了当的。非常感谢,刚刚帮我省去了输入40个属性。顺便说一句,如果你想编辑它,它是validates_presence_of btw?
validates_presence_of
是一种不推荐使用的语法。最好使用
validates:list、:of、:attribute、:names、presence:true
来代替。此外,不需要维护两个常量,只需通过执行数组差异来获取可验证字段的数组:
YourModel.attribute\u names-%w(id在修改时创建的\u)
@Andrei Horak
验证是否存在
未被弃用。@AbM中没有提到弃用,实际上是在Rails 3中,当验证被移动到
ActiveModel
并且引入
validates
时。仍然可以使用语法,但首选
验证
语法。另请参见“性感验证”说明: