#ruby #arrays #ruby-on-rails-3
#ruby #массивы #ruby-on-rails-3
Вопрос:
Я пытаюсь собрать электронные письма от группы людей, используя следующее:
def representative_email(group)
group.representatives.collect{ |m|
rep.User.find(m.user_id)
rep.email
}
end
Однако это приводит к таким результатам, как: ["email@email.com", "email2@email.com"]
Как я могу удалить все []
и ""
и оставить только:
email@email.com, email2@email.com
На самом деле, было бы лучше также заменить запятую точкой с запятой.
Ответ №1:
def representative_email(group)
group.representatives.collect{ |m|
rep.User.find(m.user_id)
rep.email
}.join('; ')
end
Результатом вашей функции (т.Е. результатом Array#collect
) является Array
; скобки и кавычки — это артефакты, появившиеся в результате того, как Array
был преобразован в String
. Если вы контролируете процесс конвертации, он, как правило, проходит лучше — поскольку вы точно знаете, что получаете.
В этом случае вы можете использовать Array#join
который склеивает строковое представление Array
вместе, используя аргумент String
в качестве клея.
Ответ №2:
Возможно, вы видели это, хотя p
или inspect
. Двойные кавычки не являются частью строк. Это просто способы литературного представления строк. А скобки и запятые означают, что они находятся внутри массива. Они появляются только тогда, когда вы просматриваете их через p
или inspect
. Если вы хотите увидеть, как они выглядят на самом деле, используйте puts
.
Ответ №3:
То, что вы видите, является «строковой» версией созданного вами массива. Если вы хотите, чтобы он был отформатирован по-другому, вам следует сделать что-то подобное при его вызове:
emails = representative_email(group).join(';')
Вы также должны быть очень осторожны при использовании find
, поскольку он может и будет генерировать исключение ActiveRecord::RecordNotFound, если он не может найти то, что вы ищете, поэтому вы должны быть готовы спасти это. Я не уверен, что вы пытаетесь сделать здесь с помощью вызова User.find
, который также кажется неуместным.