Подтвердить что ты не робот

Как найти записи с дублирующимися данными с помощью Active Record

Каков наилучший способ поиска записей с повторяющимися значениями в столбце с использованием ruby ​​и нового Activerecord?

4b9b3361

Ответ 1

Перевод @TuteC в ActiveRecord:

sql = 'SELECT id, 
         COUNT(id) as quantity 
         FROM types 
         GROUP BY name 
       HAVING quantity > 1'
#=>
Type.select("id, count(id) as quantity")
  .group(:name)
  .having("quantity > 1")

Ответ 2

Вот как я решил это с помощью AREL-помощников и без специального SQL:

Person.select("COUNT(last_name) as total, last_name").
  group(:last_name).
  having("COUNT(last_name) > 1").
  order(:last_name).
  map{|p| {p.last_name => p.total} }

Действительно, это всего лишь лучший способ написать SQL. Это находит все записи, которые имеют повторяющиеся значения last_name, и сообщает вам, сколько и какие последние имена находятся в хорошем хеше.

Ответ 3

Я бил головой об этой проблеме со стеком 2016 (Rails 4.2, Ruby 2.2) и получил то, что хотел:

> Model.select([:thing]).group(:thing).having("count(thing) > 1").all.size
 => {"name1"=>5, "name2"=>4, "name3"=>3, "name4"=>2, "name5"=>2}

Ответ 4

С помощью специального SQL это находит types с одинаковыми значениями для name:

sql = 'SELECT id, COUNT(id) as quantity FROM types
         GROUP BY name HAVING quantity > 1'
repeated = ActiveRecord::Base.connection.execute(sql)

Ответ 5

В Rails 2.x выберите private метод класса AR. Просто используйте find():

klass.find(:all, 
  :select => "id, count(the_col) as num", 
  :conditions => ["extra conditions here"], 
  :group => 'the_col', 
  :having => "num > 1")