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

Foi útil?

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")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top