如何从 rails 应用程序中的一组电子邮件中过滤掉非活动电子邮件?

How to filter out inactive emails from an array of emails in a rails application?

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

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

任何帮助将不胜感激。

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

由于您已经在使用 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