2012-07-08 4 views
0

Я пытался написать метод рубина, который мог бы:Попытки обработать дубликат ActiveRecord результаты

  1. запрос через и найти все дубликаты в нашей БД, которые удовлетворяют определенные критерии (первые name, last_name, account_id и title весь матч)
  2. итерации через них и объединить содержимое поля называется possible_unique_keys для всех дублирует
  3. Удалить дубликаты записи теперь мы имеем 1 запись для каждого с каскадными полями

Я начал с быстрым запросом вытащить только DUP кандидатов:

results = ActiveRecord::Base.connection.select_all("SELECT id, first_name, last_name, title, account_id, possible_unique_keys, device_contacts_count FROM CONTACTS AS a WHERE 1 < (SELECT Count(*) FROM CONTACTS AS b WHERE b.first_name = a.first_name AND b.last_name = a.last_name AND b.title = a.title AND b.account_id = a.account_id)") 

Он вытаскивает, что, как представляется, правильные результаты, установленные с полями, которые мне нужно. Первая проблема возникает, когда я пытаюсь перебирать их:

results.each do |contact| 
    contact.first_name 
end 

Я действительно только начал пытаться получить мою голову вокруг этой проблемы, но я получаю сообщение об ошибке при попытке ссылаться на любое из полей, как я делал выше при попытке сослаться на first_name:

NoMethodError: undefined method first_name for #<Hash:0x00000006641cb0>

ответ

1

Возвращает массив записей хэш с именами столбцов в качестве ключей и значений столбцов в качестве значений.

contact[:first_name] 

или

contact["first_name"] 
+0

Да, это то, что я делаю неправильно ... Спасибо –

Смежные вопросы