validates :uniqueness => true
是在保存模型之前强制执行唯一性的快速有效方法。
有没有简单的方法来检查现有数据的唯一性?迭代每个项目并将其与其他项目进行比较似乎很笨重......
答案 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中的
关于这一点的好处是你获得了可以枚举的完整对象列表,而无需返回数据库并删除项目,打印时间戳等等。
在控制台中查看起来有点困难,因为加载了完整记录,而不仅仅是标题和计数的哈希值。