Question

J'ai une liste d'objets 'request', chacun ayant des qualités d'activation d'enregistrement relativement normales. La table des requêtes est liée à la table des jeux avec une table de jointure, "games_requests", de sorte qu'une requête possède un tableau request.games.

La question est la suivante: existe-t-il un moyen de rechercher les n dernières demandes uniques, où l'unicité est définie par la colonne de jeux et quelques autres, tout en ignorant spécifiquement les autres colonnes (comme le nom de l'utilisateur demandeur)?

J'ai vu une syntaxe telle que 'find (: all,: limit = 5,: include = <: jeux,: stage])', mais renvoyant des doublons.

Merci ...

EDIT: Merci au chaos pour une excellente réponse. Vous m'avez vraiment rapproché, mais j'ai toujours besoin que les retours soient des objets de requête valides: les 5 premiers enregistrements distincts dans les lignes demandées. Je pourrais simplement utiliser la recherche telle que vous l'avez construite, puis effectuer une deuxième recherche pour la première ligne du tableau qui correspond à chacun des ensembles renvoyés par la première recherche.

EDIT:

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

... donne une erreur SQL:

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

J'ai apporté quelques modifications à ce que je pensais être correct pour mon projet; obtenir une liste de demandes au lieu de jeux, 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'
)

Je pense que je vais devoir utiliser le lien suivant: join = > option ici.

Était-ce utile?

La solution

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

Autres conseils

Essayez Rails uniq_by.Il fonctionne également avec les associations et renvoie un tableau.

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

Plus Détail

Je pense que vous pourrez le faire en utilisant find_by_sql et GROUP BY:

Games.find_by_sql("SELECT * FROM games GROUP BY user_id")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top