2010-12-16 56 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