У меня есть следующая ассоциация: Artist has_many Songs
. Таким образом, я могу получить песни художника, выполнив:Pluck уникальные значения из ассоциации ActiveRecord has_many
artist.songs
Однако, я хотел бы получить только жанр песен:
artist.songs.pluck(:genre)
Но этот жанр может появляться несколько раз в результатах; Мне хотелось бы получить уникальные жанровые ценности. К сожалению, pluck
здесь не поможет, так как он возвращает массив, а вызов uniq
на нем не будет настраивать запрос ActiveRecord, а обычный Array#uniq
.
я могу сделать это так:
artist.songs.select(:genre).uniq.pluck(:genre)
, но я чувствую, что должен быть лучший способ.
P.S .: Из некоторых минимальных контрольных показателей, однако, pluck + Array#uniq
кажется немного быстрее, чем select + uniq + pluck
.
Вы уверены, что 'uniq' не настраивает запрос ActiveRecord? –