Rails:从模型中获取具有唯一性验证的属性列表

时间:2011-08-18 08:12:34

标签: ruby-on-rails validation activemodel

只是想知道是否可以返回具有唯一性验证的所有属性的列表?例如,我有一个模型Person - 我想返回'Person'中具有唯一性约束的属性列表。有什么想法吗?

2 个答案:

答案 0 :(得分:6)

您可以执行类似

的操作

Person.validators.select { |v| v.is_a?(ActiveRecord::Validations::UniquenessValidator) }

获取Person模型的唯一性验证器列表。每个验证器都有一个@attributes实例变量,这就是你可能需要的。

答案 1 :(得分:0)

@eugen's answer 为基础,以下是使用唯一性验证器列出所有属性的代码:

self.class.validators.collect do |validator|
  validator.attributes if validator.is_a?(ActiveRecord::Validations::UniquenessValidator)
end.flatten.compact.uniq

它返回一个符号数组,在末尾添加.map(&:to_s)得到一个字符串数组。