2015-04-23 30 views
5

Rails ile ActionMailer içinde bir e-posta adresi ayarlamaya çalışıyorum. Sabit kodlanmadan önce, ancak bunları şimdi ENV değişkenleri yapmak istiyoruz, böylece her e-posta değiştiğinde kodu değiştirmemiz gerekmez. İşteTek tırnaklı dize dize enterpolasyonu

o anda tanımlı hesaplanır: Ben ENV['EMAIL'] kullanarak bir ortam değişkeni olarak e-posta ayarı denedim ama daha #{ENV['EMAIL'} hiçbir şans yaşıyorum

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

.

Beni doğru yöne yönlendiren var mı?

+0

[Eylem Mailer Temelleri - Adı ile Email gönderme] (http: //guides.r ubyonrails.org/action_mailer_basics.html#sending-email-with-name) – Stefan

cevap

8

Ruby'de tek tırnaklı dizelerle dize enterpolasyonunu kullanamazsınız.

Ancak çift tırnaklı dizeler yapabilir!

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

Veya kullanım dize birleştirme:

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

bir rüya çalışıyor. Yemin ederim ki bunu dün denedim ama nil oldu. Şimdi tüm işler :) Bir kez geçtikten sonra kabul edeceğim. – DMH

+0

sadece btw sen ruby ​​'s dizeleri birleştirmek için açıkça işaret + koymak zorunda kalmazsınız ''" Kişi Adı "<'ENV [' EMAIL ']'> '' aswell çalışacak, ancak ilk/ikinci örnek kullanmak savunmak id MrYoshiji tarafından sağlanan – mymlyn

+0

Bu soruya cevap vermiyor. Bazen, * tek tırnak içinde (örneğin, yalnızca tek tırnak özelliklerine izin veren d3 js svg parametrelerinde) yakutu enterpoze etmek için * gerekir. –

6

Eğer Name of Person sarma sizin çift tırnak tutmak istiyorsanız

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

Ama, ters eğik çizgi \ ile kaçabilir interpolasyonlu bir dizgede çift tırnak içine koymak istediğinizde,% notasyon sınırlayıcılarını (Ruby'nin Perl'den çaldığı) kullanabilirsiniz.

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

veya

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

Sadece dizede zaten değil % sonra sınırlayıcı seçin.

2

format'u da kullanabilirsiniz. Bunun diğer diller (örneğin C, Python) gibi Ruby gibi yaygın olarak kullanılan görmedim, ama böylesi daha iyi çalışır: Burada

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

:

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

diğer sözdizimi % operatörü kullanılarak format (aka sprintf) için dokümantasyonudur:

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

+0

'%' işlevini kullanmak daha idiomatik. –