2015-04-02 87 views
0

替换数组值我有一个电子邮件列表的YML文件,我试图做一个辅助文件中的一些修正,但我似乎无法更新,并保持这种更新的信息从阳明

我需要改变在配置文件上发送的环境电子邮件基础。 我最大的问题是,更新信息不被除生产我希望所有的电子邮件,得到了DEV-电子邮件地址,但在生产中我可以做一个eval()装载其它所有环境中保存的file_data阵列

上从配置文件中的电子邮件

例YML文件

#config/brands_mailer.yml 
brand1: 
    support: 'Appname::Application.config.support_email' 
    sales: 'Appname::Application.config.email' 
    accounting: 'Appname::Application.config.accounting_email' 
brand2: 
    support: 'Appname::Application.config.barnd2_support_email' 
    sales: 'Appname::Application.config.barnd2_email' 
    accounting: 'Appname::Application.config.barnd2_accounting_email' 
brand3: 
    support: 'Appname::Application.config.barnd3_support_email' 
    sales: 'Appname::Application.config.barnd3_email' 
    accounting: 'Appname::Application.config.barnd3_accounting_email' 

现在我有一个邮件助手,看起来像

# app/helpers/mailers/mailr_helper.rb 

module Mailers 
    module MailrHelper 
    def get_brand_emails(options ={}) 
     file_data = YAML.load_file(File.join(Rails.root, 'config','brands_mailer.yml'))[options[:brand].to_s] 
     file_data.each do |fd| 
     unless Rails.env.production? 
      fd[1] << '[email protected]' # This appends to the current value 
      fd[1] = fd[1].gsub(fd[1], '[email protected]') # this changes the data but it does not persist 
     else 
      fd[1] << eval(fd[1]) 
     end 
     end 
     file_data 
    end  
end 
+0

您可以添加一些关于您正在尝试做什么的更多信息,以及具体问题是什么,如果有的话? – 2015-04-02 13:15:24

+0

@MaxWilliams我更新了这个问题,更多的信息 – MZaragoza 2015-04-02 13:25:26

回答

0

这是我想出的解决方案。我还是想重构,使之清洁

应用程序/佣工/邮寄/ mailr_helper.rb

module Mailers 
    module MailrHelper 
    def get_brand_emails(options ={}) 
     file_data = YAML.load_file(File.join(Rails.root, 'config','brands_mailer.yml'))[options[:brand].to_s] 
     file_data.each do |fd| 
     unless Rails.env.production? 
      file_data['customer_support'] = "[email protected]" 
      file_data['new_pro']   = "[email protected]" 
      file_data['new_user']   = "[email protected]" 
     else 
      file_data['customer_support'] = eval(file_data['customer_support']) 
      file_data['new_pro']   = eval(file_data['new_pro']) 
      file_data['new_user']   = eval(file_data['new_user']) 
     end 
     end 
     file_data 
    end  
end 

这样,我还是可以强制所有电子邮件要到一个地方,并在生产中仅转发电子邮件

2

我强烈建议您在非生产环境的rails配置文件中使用邮件拦截器。有了这个功能,您就可以在所有环境中使用并测试相同的邮件进程,而无需担心为活动收件人生成电子邮件。 Here我已经描述了我倾向于为我的应用程序设置邮件拦截器。

+2

谢谢,但我们在开发中使用邮件捕获器,但我们仍然必须能够改变这些值,因为我们测试跨g-mail,雅虎,Hotmail,手机等。另外,我不想将邮件从暂存服务器发送给公司的销售人员。 – MZaragoza 2015-04-02 14:14:30

+1

我认为@MZaragoza得到的问题是,他似乎无法更新键值数组的值。用户***邮件拦截器***或其他事情的业务决策并不真正相关。 – 2015-04-03 12:14:01

+1

@AldoDelgado,是的,现在从MZaragoza做出的回应中显而易见,但是当我发布我的“解决方案”时并不是这样。 – ReggieB 2015-04-04 13:33:10