Массив на отдельные фрагменты

#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 , который также кажется неуместным.