如何检查Ruby on Rails中现有数据的唯一性?

时间:2011-10-31 18:11:41

标签: ruby-on-rails ruby-on-rails-3 models unique

validates :uniqueness => true是在保存模型之前强制执行唯一性的快速有效方法。

有没有简单的方法来检查现有数据的唯一性?迭代每个项目并将其与其他项目进行比较似乎很笨重......

1 个答案:

答案 0 :(得分:2)

我经常使用直接SQL执行此操作 - 但这是使用Rails(版本3,使用arel)的方式 - 使用组操作并获取所需字段的计数。

e.g。如果我有一堆事件 - 我想得到一些具有独特标题的事件:

Event.group(:title).count

返回标题的ActiveSupport :: OrderedHash和找到的计数。然后,您可以在哈希上执行select以过滤掉切片列表。 e.g。

Event.group(:title).count.select{|title,count| count >= 2}

它为您提供了可以返回并执行某些操作的标题,查找每个标题并删除标题等。

您也可以执行"having" operation(我在原始sql中执行此操作),例如

Event.group(:title).having('count(title) >= 2')

是:

SELECT `events`.* FROM `events` GROUP BY title HAVING count(title) >= 2
SQL中的

关于这一点的好处是你获得了可以枚举的完整对象列表,而无需返回数据库并删除项目,打印时间戳等等。

在控制台中查看起来有点困难,因为加载了完整记录,而不仅仅是标题和计数的哈希值。