2010-12-16 6 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. を修正して再提出する機会を与えることができ、すべての無効な電子メールのリストを保持し、メールサーバ
  3. にキューイングする前に有効です。次の操作を行います

返される無効なレコードを保存している間に、このタイプの電子メール検証を行う方法に関する提案はありますか?ここで

おかげ

答えて

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

+0

また、なぜ "validates_email_veracity_of"をモデルに追加しますか? – AnApprentice

+0

別のフォームから来た単一の電子メールアドレスを同じモデルでチェックしているので、モデルに追加しました。それはあなたの場合にはオプションかもしれません。 pattern_is_valid? well-formedの電子メールアドレスを既知のパターンと照合して検証します。すべてのRFC 2822の有効なアドレスが検証されることはありません。 – Raghu

関連する問題