2010-12-16 48 views
1

我试图创建一个表单,用户可以输入电子邮件列表发送使用Devise Invitable的邀请。Rails - 验证控制器中的电子邮件列表

这里是我的控制器与有效电子邮件的工作原理:

同时通过所有的邮件循环
def create 

    params[:user][:email].split(/, ?/).each do |email| 
    params[resource_name][:email] = email 
    self.resource = resource_class.invite!(params[resource_name].merge(:invited_by => current_user.instance_id)) 
    end 

    respond_to do |format| 
    if resource.errors.empty? 
     format.js { render :template => 'devise/invitations/create' } 
    else 
     format.js { render 'devise/invitations/errors', :notice => resource.errors } 
    end 
    end 
end 

我的最终目标。执行以下操作:

  1. 有效的电子邮件是有效的排队邮件服务器
  2. 之前把所有的无效电子邮件的列表,所以我们可以让用户知道,并给他们一个机会来修复并重新提交

关于如何进行这种类型的电子邮件验证,同时存储任何无效的记录被发回的建议?

感谢

回答

2

这里是我写了几个月前的验证电子邮件的列表(以逗号分隔),并筛选电子邮件的列表,并从有效们分开无效的电子邮件的代码一小片。此代码使用rspec进行测试

def parse_emails(emails) 
    valid_emails, invalid_emails = [], [] 
    unless emails.nil? 
     emails.split(/,|\n/).each do |full_email| 
     unless full_email.blank? 
      if full_email.index(/\<.+\>/) 
      email = full_email.match(/\<.*\>/)[0].gsub(/[\<\>]/, "").strip 
      else 
      email = full_email.strip 
      end 
      email = email.delete("<").delete(">") 
      email_address = ValidatesEmailVeracityOf::EmailAddress.new(email) 
      if email_address.pattern_is_valid? 
      valid_emails << email 
      else 
      invalid_emails << email 
      end 
     end 
     end      
    end 
    return valid_emails, invalid_emails 
    end 

随时可以对此进行重构。

我使用的是validates_email_veracity_of插件,它使得这项工作更容易一些,并增加了更强的验证。 将此线添加到模型的顶部

validates_email_veracity_of :email_address, :domain_check => false, 
             :message => 'is invalid for one of your invitations. Please review what you have entered.', 
             :timeout => 1 # => Time in seconds. 
+0

非常好。 “pattern_is_valid”部分是做什么的?不熟悉,并没有看到在文档 – AnApprentice 2010-12-16 17:06:08

+0

此外,为什么添加“validates_email_veracity_of”模型? – AnApprentice 2010-12-16 17:17:05

+0

我已经将它添加到模型中,只是因为我有他同样的模型检查来自单独窗体的单一电子邮件地址。你的情况可能是可选的。 pattern_is_valid?根据熟知的模式验证格式良好的电子邮件地址。请注意,它不会验证所有RFC 2822有效地址。 – Raghu 2010-12-16 19:58:25