В моем приложении есть следующий метод:
def self.tagged_with( string )
array = string.split(',').map{ |s| s.lstrip }
joins(:tags).where('tags.name' => array ).group('photos.id')
end
Это поиск фотографий, на которых много тегов в тегах.
Этот метод берет список тегов через запятую и возвращает все фотографии, связанные с тегами с заданными именами.
Проблема в том, что он разбивает PostgreSQL со следующим сообщением об ошибке:
ActionView::Template::Error (PGError: ERROR: column "photos.custom_title" must appear in the GROUP BY clause or be used in an aggregate function
: SELECT "photos".* FROM "photos" INNER JOIN "taggings" ON "photos"."id" = "taggings"."photo_id" INNER JOIN "tags" ON "tags"."id" = "taggings"."tag_id" WHERE "tags"."name" IN ('village') AND ("photos".collection_id = 1) GROUP BY photos.id LIMIT 20 OFFSET 0):
В другом, несколько схожем вопросе ответчик предположил, что при использовании .group()
необходимо включать все столбцы в таблице. Это кажется мне безумным - какого черта смысл .group
, если вы можете использовать его, только набрав все поля в вашей модели. Это хрупко, и в целом это плохая идея.
Кто-нибудь может предложить альтернативный способ заставить этот метод работать с PostgreSQL?