2011-06-23 14 views
0

私はRails 3をDevitsでセットアップしましたが、ちょっとねじれています。私はすべてのユーザのメールをemailsテーブルに保存しています。パスワードを忘れた場合の問題が発生しています。 Deviseがユーザーの電子メールを探してパスワードリセットを送信するために使用するいくつかの方法を無効にする必要があることを知っていますが、どこから開始するのかはわかりません。あなたが私に与えることができるアドバイスは、とても感謝しています。Rails 3 Deviseパスワードを忘れた複数のメールアドレス

答えて

0

同様の質問に対して私のanswerを参照してください。あなたはそれが複数の電子メールに送信するためにDevise::Mailerにメーラーオーバーライドheaders_forを作成します。

def headers_for(action) 
    #grab the emails somehow 
    @emails = resource.emails.map{|email| email.column_name} 
    if action == :reset_password_instructions 
    headers = { 
     :subject  => translate(devise_mapping, action), 
     :from   => mailer_sender(devise_mapping), 
     :to   => @emails, 
     :template_path => template_paths 
    } 
    else 
    # otherwise send to the default email--or you can choose just send to all of them regardless of action. 
    headers = { 
     :subject  => translate(devise_mapping, action), 
     :from   => mailer_sender(devise_mapping), 
     :to   => resource.default_email, 
     :template_path => template_paths 
    } 
    end 

    if resource.respond_to?(:headers_for) 
    headers.merge!(resource.headers_for(action)) 
    end 

    unless headers.key?(:reply_to) 
    headers[:reply_to] = headers[:from] 
    end 
    headers 
end 
2

工夫は、モデル法[メール]からメールアドレスを取得します。したがって、電子メールモデルで電子メールテーブルにすべての電子メールを保存する場合は、ユーザーのモデルに「電子メール」メソッドを定義し、電子メールテーブルからアドレスを返すことができます。

class User < ActiveRecord::Base 
    devise :database_authenticatable, :recoverable, :rememberable, :authentication_keys => [ :login ], :reset_password_keys => [ :login ] 
    has_many :emails 
    ... 
    def email 
    emails.map{|record| record.email } 
    end 
end 
関連する問題