#ruby-on-rails #ruby #arrays
#ruby-on-rails #ruby #массивы
Вопрос:
У меня есть некоторый код, в котором я перебираю фрагменты данных, и мне приходится писать один и тот же код несколько раз, и я хочу «ВЫСУШИТЬ его».
Вот часть кода:
<%= raw @artist["albums"]["Albums"].uniq_by{ |a| a["Genre"] }.collect { |album| link_to album["Genre"], genre_path(CGI::escape(album["Genre"])) unless album["Artist"]["Name"] != @term }.join(" ") %>
Часть, которую мне приходится дублировать несколько раз, — это конец unless album["Artist"]["Name"] != @term
, есть ли способ фильтровать массив лучше, чем каждый раз писать это выражение unless?
надеюсь, это имеет смысл
Я смог сократить код, удалив uniq_by
<%= raw @artist["albums"]["Albums"].collect { |album| link_to album["Genre"], genre_path(CGI::escape(album["Genre"])) unless album["Artist"]["Name"] != @term }.uniq.join(" ") %>
Комментарии:
1. Ну, вы могли бы написать вспомогательный метод, но я думаю, вам нужно пересмотреть эту строку кода с самого начала. Чего вы пытаетесь достичь?
2. ну, я пытаюсь собрать все уникальные жанры, где имя исполнителя равно
@term
переменной … извините, если код неаккуратный .. все еще изучаю Ruby: P3. Итак, вам просто нужен список жанров исполнителя?
4. да, по сути, они просто должны быть уникальными, чтобы удалять дубликаты
5. Ну, вы можете сделать это с
@artist.genres.uniq.map{|genre| genre.title}.join(",")
помощью или чего-то подобного, если вы правильно настроили ассоциацию.
Ответ №1:
Похоже, вы эмулируете ГРУППУ ПО запросу в своем представлении. В частности, ваше @term
предложение выглядит как WHERE
условие или ограничение соединения.
Если у вас есть модель альбома, я бы добавил одну или несколько именованных областей, представляющих части запроса, а затем просто объединил их вместе в вашем представлении (с a collect
в конце для форматирования тегов ссылок.)