Как проверить уникальность существующих данных в Ruby on Rails? - PullRequest
1 голос
/ 31 октября 2011

validates :uniqueness => true - это быстрый и эффективный способ обеспечить уникальность перед сохранением модели.

Есть ли простой способ проверить уникальность существующих данных? Перебирать каждый элемент и сравнивать его с остальными кажется таким неуклюжим ...

1 Ответ

2 голосов
/ 31 октября 2011

Я чаще всего делаю это с прямым SQL - но вот Rails (версия 3, использующая arel) способ сделать это - использовать групповую операцию и получить счетчик желаемого поля.

например, еслиУ меня есть куча событий - и я хотел получить количество событий с уникальными заголовками:

Event.group(:title).count

, которое возвращает ActiveSupport :: OrderedHash заголовка и найденное количество.Затем вы можете сделать select в хэше, чтобы отфильтровать список тайлов.например,

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

Это дает вам названия, с которыми вы можете вернуться и что-то сделать, найти и удалить их, и т. д.

Вы также можете сделать "имея"операция (что я делаю в raw sql), например:

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

, что:

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

в SQL

Хорошая вещь в том, что вы получаетеполный список объектов, который вы можете перечислить, не возвращаясь к БД и не удаляя элементы, печатая временные метки, что угодно.

В консоли смотреть немного сложнее, поскольку загружается полная запись, а не просто хэш заголовков и счетчиков.

...