2015-04-23 4 views
5

Я пытаюсь установить адрес электронной почты в ActionMailer с Rails. Прежде чем он был жестко закодирован, но мы хотим сделать их переменными ENV, поэтому нам не нужно изменять код каждый раз, когда изменяется электронное письмо.Интерполяция строк строки с одной строкой

Вот как это определено в настоящее время:

from = '"Name of Person" <[email protected]>' 

Я попытался установить электронную почту в качестве переменной окружения с помощью ENV['EMAIL'], но я не имею никакой удачи даже с #{ENV['EMAIL'}.

Может ли кто-нибудь указать мне правильное направление?

+0

[Action Mailer - Основы отправки электронной почты с именем] (HTTP: //guides.r ubyonrails.org/action_mailer_basics.html#sending-email-with-name) – Stefan

ответ

8

Вы не можете использовать строчную интерполяцию с одиночными кавычками в Ruby.

Но строки с двойными кавычками могут!

from = "'Name of Person' <#{ENV['EMAIL']}>" 

Но если вы хотите сохранить ваши двойные кавычки обертывание Name of Person, вы можете избежать их с помощью обратной косой черты \:

from = "\"Name of Person\" <#{ENV['EMAIL']}>" 

Или используйте конкатенации:

from = '"Name of Person" <' + ENV['EMAIL'] + '>' 
# but I find it ugly 
+0

работает сон. Мог поклясться, что я пробовал это вчера, но получал ноль. Все работает сейчас :) Я соглашусь, как только истечет время. – DMH

+0

просто вам не нужно явно помещать знак +, чтобы объединить строки в ruby ​​'' «Имя человека» <'ENV [' EMAIL ']'> ''будет работать так же, как бы защитник не использовал первый/второй пример предоставленный MrYoshiji – mymlyn

+0

Это не отвечает на вопрос. Иногда вам нужно * интерполировать рубин внутри одинарных кавычек (например, в параметрах d3 js svg, которые допускают только свойства одной кавычки). –

6

Если вы хотите встроить двойные кавычки в интерполированную строку, вы можете использовать разделители% нотации (которые Ruby украл с Perl), например

from = %|"Name of Person", <#{ENV['EMAIL']}>| 

или

from = %("Name of Person", <#{ENV['EMAIL']}>) 

Просто выберите разделитель после %, который уже не в вашей строке.

2

Вы также можете использовать format. Я не видел раньше, как правило, в Ruby, как и в других языках (например, C, Python), но она работает точно так же:

from = format('"Name of Person", <%s>', ENV["EMAIL"]) 

Альтернативный синтаксис с использованием % оператора:

from = '"Name of Person", <%s>' % ENV["EMAIL"] 

Здесь документация для format (ака sprintf):

http://ruby-doc.org/core-2.2.0/Kernel.html#method-i-format

+0

Использование '%' более идиоматично. –

Смежные вопросы