Ich verwende Rails 3 und postgresql. Ich habe folgende Genres: Rock, Ambiente, Alternative, House.Wie erhalten Sie aktive Genres in ActiveRecord?
Ich habe auch zwei Benutzer registriert. Man hat Rock und die anderen Haus, wie ihre Genres. Ich muss Rock- und House-Genre-Objekte zurückgeben.
Ich habe zwei Möglichkeiten gefunden, dies zu tun. Man verwendet Gruppe:
Genre.group('genres.id, genres.name, genres.cached_slug, genres.created_at, genres.updated_at').joins(:user).all
Und das andere mit DISTINCT:
Genre.select('DISTINCT(genres.name), genres.cached_slug').joins(:user)
beide die gleichen gewünschten Ergebnisse zurück. Aber welches ist besser leistungsfähig? Mit Gruppe() sieht chaotisch, da ich alle Felder in der Genre-Tabelle, um anzuzeigen, haben sonst werde ich Fehler als solche erhalten:
ActiveRecord::StatementInvalid: PGError: ERROR: column "genres.id" must appear in the GROUP BY clause or be used in an aggregate function
: SELECT genres.id FROM "genres" INNER JOIN "users" ON "users"."genre_id" = "genres"."id" GROUP BY genres.name
Gereinigt mehr mit: Genre.select ('DISTINCT (genres.name), genres. *'). Joins (: user) –