2015-05-26 2 views
0

Я пытаюсь выполнить очистку некоторых данных.Rails объединяет дубликаты, если значение соответствует или nil

У меня есть детали в различных формах с различными дубликатами.

models/object.rb 

attr_accessible :name, :email, :assoc_id 

Я хочу объединить дублирующиеся где имя соответствие и электронная почта либо согласования или ноль, а assoc_id либо соответствия или ноль.

Не знаю, как я пишу запрос, чтобы вернуть группы объектов, которые либо согласование или ноль ..

т.е.

grouped_objects = Object.group_by{|o| [o.name]} 

приносит мне сгруппирован только по имени

grouped_objects = Object.group_by{|o| [o.name, o.email]} 

приносит мне сгруппированное имя и адрес электронной почты.

Проблема в том, что многие объекты не имеют данных.

Просто захотите быстро и грязно, чтобы в отсутствие другой информации я объединил записи вместе.

Однако, если есть кто-то с другим адресом электронной почты или с другим сообщением, я не буду это слить. Цените, что будут какие-то ложные записи, но то, что мы получим, будет улучшением.

Как написать этот запрос activerecord?

grouped_objects = Object.group_by{|o| [o.name, o.email || o.email == nil]} 

Надежда, что имеет смысл,

+0

Я не уверен, почему вы хотите объединить эти объекты. Вы хотите, чтобы ваш объект был уникальным по имени и электронной почте (и разрешает пустую электронную почту) в вашей базе данных? – Kilian

+0

Большинство объектов автоматически генерируются другим процессом, который запускается системой. Этот процесс не всегда имеет доступ к полной информации, но относится к тем же «людям» (или объектам). В настоящее время у нас большой беспорядок из нескольких дубликатов записей, которые явно относятся к тем же людям. Я бы хотел очистить это от прикосновения. Я хочу объединить их, поскольку они связаны с другими объектами в базе данных wher eit имеет смысл знать, что они являются тем же человеком, что и отношение – Carpela

ответ

0

Я думаю, что лучший способ сделать это тоже ваша модель непереносимостью с дублированием. Вы можете предотвратить дублирование непосредственно в модели. Поэтому, когда ваш контроллер пытается создать объект, он проверяет, не существует ли какой-либо элемент, который вы решите.

Так что, если вы хотите, чтобы ваш объект быть уникальным некоторым элементом, лучше сделать что-то подобное (если вы хотите, уникальность от имени и поля электронной почты) в MyModel.rb:

class MyModel < ActiveRecord::Base 

    attr_accessible :name, :email, :assoc_id 

    validates_uniqueness_of :name 
    validates_uniqueness_of :email, :allow_nil => true # or :allow_blank => true 

    # Your code... 

end 

Вы также можете использовать :case_sensitive => false, если вы не хотите, чтобы верхний регистр отличался от нижнего регистра.

Надеюсь, это то, что вы ищете!

+0

Не совсем, если честно ... Я не хочу останавливать процесс делая то, что он делает. Более важно, чтобы мы получили информацию разумно, чем уникальную. Баснически мы собираем эти данные (тысячи каждый день), поэтому со временем мы генерируем большое количество отдельных записей, которые на самом деле относятся к одному и тому же человеку. – Carpela

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