2011-06-23 66 views
0

我有我的Rails 3設置瓦特/設計,但有輕微的扭曲:我存儲在emails表中的所有用戶的電子郵件和每個用戶可以擁有多個電子郵件。我遇到了忘記密碼功能的問題。我知道我必須重寫Devise用來查找用戶電子郵件的一些方法,然後發送密碼重置,但我不知道從哪裏開始。任何你可以提供給我的建議是非常感謝。Rails 3的設計忘記密碼W /多封電子郵件

回答

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