Rails通过重复验证唯一性

时间:2012-02-19 05:51:17

标签: ruby-on-rails validation unique

我希望使用给定的重复次数验证唯一性,例如允许三个具有相同名称的用户。

User id: 1, name: "user"
User id: 2, name: "user"
User id: 3, name: "user"

但是您无法创建具有相同名称的第四个用户。我该怎么办:

  1. 使用参数创建validates_uniqueness_of?
  2. 或创建自定义验证?
  3. 我会很感激的例子。

1 个答案:

答案 0 :(得分:3)

您需要自定义验证,例如

validates :validate_three_maximum

def validate_three_maximum
  if User.where(:name => "user").count >= 3 && (new_record? || name_changed?)
    errors.add(:name, "Maximum of 3 with this name")
  end
end

请注意,您的应用程序中的数据库唯一性检查容易出现竞争情况:请参阅Concurrency and Integrity

编辑:添加了new_record? + name_changed?检查更新记录不会计入3。