Удаление "дублирующих объектов" - PullRequest
0 голосов
/ 07 мая 2010

Допустим, у меня есть массив объектов из одного и того же класса с двумя интересующими нас атрибутами: name и creation_at.

Как мне найти в массиве объекты с одинаковыми именами (считаются дупсами),а затем удалите дубликат записи в базе данных.Тем не менее, объект с самой последней датой созданного_дата должен быть удален.

Ответы [ 2 ]

2 голосов
/ 07 мая 2010
seen = []
#sort by created date and iterate
collection.sort({|a,b| a.created_at <=> b.created_at}).each do |obj| 
  if seen.map(&:name).include? obj.name #check if the name has been seen already
    obj.destroy!
  else
    seen << obj #if not, add it to the seen array
  end
end

Надеюсь, сделаем работу.

0 голосов
/ 07 мая 2010

Если это единовременное исправление перед введением в таблицу UNIQUE INDEX, вы также можете сделать это в SQL:

DELETE FROM t WHERE id IN (
    SELECT t1.id
    FROM t t1
    LEFT JOIN t t2 ON t1.name = t2.name AND t2.created_at < t1.created_at
    WHERE t2.id IS NOT NULL
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...