Я использую Rails 3 и postgresql. У меня есть следующие жанры: рок, атмосфера, альтернатива, дом.Как получить активные жанры в activerecord?
У меня также есть зарегистрированных пользователей. Один имеет рок, а другой дом, как их жанры. Мне нужно вернуть объекты жанра и дома.
Я нашел два способа сделать это. Один использует группу:
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)
Оба возвращают те же самые желаемые результаты. Но какая из них лучшая производительность? Использование группы() выглядит неаккуратно, так как я должен указать все поля таблицы Жанр иначе я получаю ошибки как таковой:
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
Очистить его больше: Genre.select ('DISTINCT (genres.name), жанры. *'). Joins (: user) –