Pregunta

Tengo una lista de objetos 'request', cada uno de los cuales tiene cualidades de registro activo bastante normales. La tabla de solicitudes está relacionada con la tabla de juegos con una tabla de unión, 'games_requests', de modo que una solicitud tiene una matriz request.games.

La pregunta es, ¿hay alguna forma de hacer una búsqueda para las últimas n solicitudes únicas, donde la unicidad está definida por la columna de juegos y un par de otras, pero ignora específicamente otras columnas (como el nombre del usuario solicitante)?

Vi una sintaxis como 'find (: all,: limit = > 5,: include = > [: games,: stage])' pero eso estaba devolviendo duplicados.

Gracias ...

EDITAR: Gracias al caos por una gran respuesta. Me tienes muy cerca, pero todavía necesito que las devoluciones sean objetos de solicitud válidos: los primeros 5 registros que son distintos en las filas solicitadas. Podría usar el hallazgo tal como lo construyó y luego hacer un segundo hallazgo para la primera fila de la tabla que coincida con cada uno de los conjuntos devueltos por el primer hallazgo.

EDITAR:

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

... da un error de SQL:

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

Hice algunos cambios para lo que supuse que era correcto para mi proyecto; obtener una lista de solicitudes en lugar de juegos, 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'
)

Creo que voy a tener que usar: join = > opción aquí.

¿Fue útil?

Solución

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

Otros consejos

Pruebe Rails uniq_by. También funciona con asociación y devuelve una matriz.

@document = Model.uniq_by (& amp;: field)

Más Detalle

Creo que podrá hacer esto usando find_by_sql y GROUP BY:

Games.find_by_sql("SELECT * FROM games GROUP BY user_id")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top