Я использую Rails 3 и postgresql. У меня есть следующие жанры: рок, атмосфера, альтернатива, хаус.
У меня также есть два зарегистрированных пользователя. Один из них имеет рок , а другой house в качестве жанров. Мне нужно вернуть предметы жанра рок и хаус.
Я нашел два способа сделать это. Один использует группу:
Genre.group('genres.id, genres.name, genres.cached_slug, genres.created_at, genres.updated_at').joins(:user).all
А другой использует DISTINCT:
Genre.select('DISTINCT(genres.name), genres.cached_slug').joins(:user)
Оба возвращают одинаковые желаемые результаты. Но какой из них лучше по производительности? Использование group () выглядит беспорядочно, так как я должен указать все поля в таблице Genre, иначе я получу ошибки как таковые:
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