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

Как найти() все записи уникальные в определенных полях?

У меня есть список объектов запроса, каждый из которых имеет довольно нормальные свойства activerecord. Таблица запросов связана с таблицей игр с таблицей соединений "games_requests", так что запрос имеет массив request.ames.

Вопрос в том, есть ли способ сделать поиск для последних n уникальных запросов, где уникальность определяется столбцом игр и несколькими другими, но в частности игнорирует другие колоны (например, имя запрашивающего пользователя?).

Я видел синтаксис вроде "find (: all,: limit = > 5,: include = > [: games,: stage])", но это возвращало дубликаты.

Спасибо...

EDIT: Благодаря хаосу для отличного ответа. Вы меня очень близко закрыли, но мне все же нужны, чтобы возвращаемые значения были действительными объектами запроса: первые 5 записей, которые различаются в запрошенных строках. Я мог бы просто использовать find, когда вы его построили, а затем сделать вторую находку для первой строки в таблице, которая соответствует каждому из наборов, возвращаемых первой находкой.

ИЗМЕНИТЬ:

Games.find(
    :all, :limit => 5,
    :include => [:games, :requests],
    :group => 'games, whatever, whatever_else'
)

... дает ошибку SQL:

Mysql::Error: Unknown column 'games' in 'group statement': SELECT * FROM `games`  GROUP BY games

Я сделал несколько изменений для того, что я считал правильным для своего проекта; получение списка запросов вместо игр и т.д.:

Request.find(
    :all, :order=>"id DESC", :limit=>5,
    :include=>[:games],   #including requests here generates an sql error
    :group=>'games, etc'  #mysql error:  games isn't an attribute of requests
    :conditions=>'etc'
)

Я думаю, что мне придется использовать параметр: join = > здесь.

4b9b3361

Ответ 1

Games.find(
    :all, :limit => 5,
    :include => [:games, :requests],
    :group => 'games, whatever, whatever_else'
)

Ответ 2

Попробуйте Rails uniq_by.It также работает с ассоциацией и возвращает массив.

@document = Model.uniq_by(&:field)

Подробнее Подробно

Ответ 3

Я думаю, что вы сможете сделать это, используя find_by_sql и GROUP BY:

Games.find_by_sql("SELECT * FROM games GROUP BY user_id")