我正在尝试创建一个表单,用户可以使用Devise Invitable输入电子邮件列表以发送邀请。
这是我的控制器,它使用有效的电子邮件:
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
循环浏览所有电子邮件时的最终目标。执行以下操作:
有关如何在存储要发回的无效记录时执行此类电子邮件验证的建议?
由于
答案 0 :(得分: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.