Domanda

Ho un elenco di oggetti 'request', ognuno dei quali ha qualità activerecord abbastanza normali. La tabella delle richieste è correlata alla tabella dei giochi con una tabella join, "games_requests", in modo che una richiesta abbia un array request.games.

La domanda è: c'è un modo per fare una ricerca per le ultime n richieste uniche, in cui l'unicità è definita dalla colonna giochi e da un paio di altre, ma ignora specificamente altre colonne (come il nome dell'utente richiedente?)

Ho visto una sintassi come 'find (: all,: limit = > 5,: include = > [: games,: stage])' ma che restituiva duplicati.

Grazie ...

EDIT: grazie al caos per un'ottima risposta. Mi hai avvicinato molto, ma ho ancora bisogno che i ritorni siano oggetti richiesta validi: i primi 5 record che sono distinti nelle righe richieste. Potrei semplicemente usare la ricerca mentre la costruisci e quindi fare una seconda ricerca per la prima riga nella tabella che corrisponde a ciascuno dei set restituiti dalla prima ricerca.

EDIT:

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

... genera un errore SQL:

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

Ho apportato alcune modifiche a ciò che ho ritenuto corretto per il mio progetto; ottenere un elenco di richieste anziché giochi, ecc.

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'
)

Sto pensando che dovrò usare: join = > opzione qui.

È stato utile?

Soluzione

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

Altri suggerimenti

Prova Rails uniq_by. Funziona anche con associazione e restituisce array.

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

Altro Dettaglio

Penso che sarai in grado di farlo usando find_by_sql e GROUP BY:

Games.find_by_sql("SELECT * FROM games GROUP BY user_id")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top