【问题标题】:How to filter out inactive emails from an array of emails in a rails application?如何从 Rails 应用程序中的一系列电子邮件中过滤掉不活动的电子邮件?
【发布时间】:2021-11-26 23:08:55
【问题描述】:

我目前正在处理一张票,它要求我过滤掉任何要发送给收件人的非活动电子邮件。这是我正在研究的方法:

def self.delivering_email(message)
    return if email_to_be_delivered?(message.subject)
    
    email_list = message.to
    if email_list.is_a?(String)
      email_list = email_list.split(",").map(&:strip)
    end

    email_list.each { |email| 
      identity = Identity.find_by(email: email)
      next if identity.nil?
      # email_list.delete(email) unless identity.try(:preferred_user).active?
      email_list.select(email) if identity.try(:preferred_user).active?
    }
    
    message.to = email_list
    message.perform_deliveries = !email_list.empty?
  end

“# email_list.delete(email) 除非 identity.try(:preferred_user).active?”我注释掉是因为 QA 提到只有一封非活动电子邮件会过滤掉,并且不会完全过滤阵列中的其他非活动电子邮件。我假设我必须使用 .select 而不是 .delete,但不知道它是否有效,因为我没有任何方法来测试和重现错误,或者如何以正确的方式实现它。

任何帮助将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    您在迭代数组时尝试修改数组,这可能会导致奇怪的行为。一种选择是只使用一个单独的数组。

    由于您已经在使用email_list.each 进行迭代,因此如果当前的email 不满足您的要求,您可以调用next,就像您已经为identity.nil? 所做的那样。

    所以看起来有点像

    valid_emails = []
    email_list.each { |email|
      identity = Identity.find_by(email: email)
      next if identity.nil? || !identity.try(:preferred_user).active?
      valid_emails << email
    end
    
    
    message.to = valid_emails
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多