2017-06-01 1 views
0

J'ai du mal à comprendre comment interroger ma base de données correctement.Rails requête avec distinct

Ma requête est comme ce qui suit:

@events = Event.where("startdate > '#{now}'") 

Il y a une colonne dans le modèle d'événements appelé name, je dois retourner tous les événements dont name est distincte, mais je dois aussi toutes les colonnes. Comment pourrais-je accomplir cela?

Je pensais que cela fonctionnerait, mais ce n'est pas:

@events = Event.where("startdate > '#{now}'").uniq 

Alors je compris qu'il n'a aucune idée de ce qu'il faut regarder pour juger l'unicité, comment puis-je dire unique de regarder la colonne Nom juger l'unicité?

données:

ID | Name   | Description | start 
1 christmas  holiday  12-25-16 
2 christmas  holiday  12-25-17 
3 thanksgiving holiday  11-24-16 

doit retourner

1 christmas  holiday  12-25-16 
3 thanksgiving holiday  11-24-16 

grâce,

+1

Que voulez-vous dire "dont le nom est distinct"? Juste un événement s'il y a plus d'événements avec le même nom? Est-ce correct? – Ursus

+0

Edited, oui il y a une colonne nommée "name" – jacksonecac

+1

Et donc, dans ce cas, un événement aléatoire des événements avec le même nom? – Ursus

Répondre

1

Vous pouvez utiliser un bloc pour dire uniq comment faire le travail

@events = Event.where("startdate > '#{now}'").uniq(&:name) 

Otherwis e, et probablement c'est mieux, vous pouvez tout faire en SQL, car uniq ne l'est pas, il itére votre resultset.

@events = Event.where("startdate > '#{now}'").group(:name) 
+0

parfait, merci – jacksonecac

+0

Mon plaisir Monsieur – Ursus

0

Vous pouvez avoir la course de requête de la manière suivante:

@event = Event.where("startdate > '#{now}'").uniq(:name) 

ce sera en mesure de vous fournir des données avec seulement des entrées uniques.