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