Como posso encontrar () todos os registros exclusivos em determinadas áreas?
-
19-08-2019 - |
Pergunta
Eu tenho uma lista de objetos 'pedido', cada um dos quais tem qualidades bastante normais activerecord. A tabela pedidos está relacionada à mesa de jogos com uma tabela de junção, 'games_requests,' de modo que um pedido tem uma disposição request.games.
A pergunta é, existe uma maneira de fazer um achado para os últimos n únicas solicitações, onde singularidade é definido pela coluna de jogos e alguns outros, mas especificamente ignora outras colums (como o nome do usuário solicitante?)
Eu vi uma sintaxe como 'find (: all,: limit => 5,: incluir => [: jogos,: Estágio])', mas que estava retornando duplicatas
.Obrigado ...
EDIT: Graças ao caos de uma grande resposta. Você me pegou muito perto, mas eu ainda preciso os retornos de ser objetos solicitação válida: os primeiros 5 registros que são distintas nas linhas solicitadas. Eu poderia usar apenas o achado como você construiu e depois fazer uma segunda descoberta pela primeira linha da tabela que corresponde cada um dos conjuntos retornados pelo primeiro achado.
EDIT:
Games.find(
:all, :limit => 5,
:include => [:games, :requests],
:group => 'games, whatever, whatever_else'
)
... dá um erro SQL:
Mysql::Error: Unknown column 'games' in 'group statement': SELECT * FROM `games` GROUP BY games
Eu fiz algumas mudanças para que eu assumi ser correto para o meu projeto; obter uma lista de pedidos em vez de jogos, etc:
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'
)
Eu estou pensando que eu vou ter que usar o:. Join => opção aqui
Solução
Games.find(
:all, :limit => 5,
:include => [:games, :requests],
:group => 'games, whatever, whatever_else'
)
Outras dicas
Tente Rails uniq_by.It também funciona com leque associação e retorna.
@document = Model.uniq_by(&:field)
Mais Detalhe
Eu acho que você vai ser capaz de fazer isso usando find_by_sql e GROUP BY:
Games.find_by_sql("SELECT * FROM games GROUP BY user_id")