2011-06-20 18 views
5

Uygulamamın davetiyelerinin sistem e-posta adresi yerine invitörden gelmesini istiyorum. Config.mailer_sender'ı devise.rb'den nasıl geçersiz kılabilirim?Overide mailer devise_invitable içinde mi?

Bunu posta makinemde alıyorum ve çağrıldığını doğruladım, ancak :from'u geçersiz kılmaz. Not: Bu özel bir yöntem, hiçbir etkisi olmayan bir kamu yöntemi olarak denedim.

private 

def headers_for(action) 
    if action == :invitation_instructions 
    headers = { 
     :subject  => "#{resource.invited_by.full_name} has invited you to join iTourSmart", 
     :from   => resource.invited_by.email, 
     :to   => resource.email, 
     :template_path => template_paths 
    } 
    else 
    headers = { 
     :from   => mailer_sender(devise_mapping), 
     :to   => resource.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 
+0

Eylem ": davet_dizimleri" olamaz mı? Ben senin diyelim ki: "invitations_instructions" – swrobel

+0

olması gerektiği gibi, ekstra bir s inanıyorum, teşekkürler, ama yazım hatası, bu yüzden sorun değil. Netleştirmek için soruyu düzenleyeceğim. –

cevap

4

Benzer bir soruya my answer'a bakın, bu yardımcı olabilir.

Düzenleme: Bu nedenle kaynak sınıfınızda bir public headers_for yöntemi tanımlamanız gerektiği anlaşılıyor.

Çözüm: Bu yöntemin bazı sürümlerini User.rb'ye koyun, herkese açık olduğundan emin olun.

def headers_for(action) 
    action_string = action.to_s 
    case action_string 
    when "invitation" || "invitation_instructions" 
    {:from => '[email protected]'} 
    else 
    {} 
    end 
end 

Sen Devise::Mailer karma değerlerini birleştirmek için çalışacağız çünkü bir karma dönmek zorunda.

+0

Baktım - teşekkürler ve özür dilerim, daha önce bunu özledim ve hala bir şeyleri özlüyorum. Hatta, yukarıdaki kodu ": return_path" ifadesini ': invitation_instructions' şeklinde eklemek için düzenledik ve alınan e-postada doğru, ancak': from' hala sistem varsayılanıdır. –

+0

"Eğer action ==: invitation_instructions" durumunda koşulu geçtiğini doğruladınız mı? – David

+0

Yaptım. Bu bloktaki diğer paramları değiştirebilir ve gönderilen e-postada değişiklik olabilir. –

5

herhangi hacks daha iyi bir çözüm/maymun yamalar olacaktır: Örneğin , Modelinizdeki:

def invited_user_instructions(user, current_user, sa) 
    @user = user 
    @current_user = current_user 
    @sa = sa 
    mail(to: user.email, subject: "#{current_user.name} (#{current_user.email}) has invited you to the #{sa} account ") 
    end 

Bu yüzden herhangi bir konu/veri koyabilirsiniz: postasının içinde

def invite_and_notificate_member user_email 
    member = User.invite!({ email: user_email }, self.account_user) do |u| 
    u.skip_invitation = true 
    end 
    notificate_by_invitation!(member) 
end 

def notificate_by_invitation! member 
    UserMailer.invited_user_instructions(member, self.account_user, self.name).deliver 
end 

postanın vücudunda.

İyi şanslar!

3

devise_invitable wiki'a bir göz atın.

class User < ActiveRecord::Base 
    #... regular implementation ... 

    # This method is called interally during the Devise invitation process. We are 
    # using it to allow for a custom email subject. These options get merged into the 
    # internal devise_invitable options. Tread Carefully. 
    # 
def headers_for(action) 
    return {} unless invited_by && action == :invitation_instructions 
    { subject: "#{invited_by.full_name} has given you access to their account" } 
    end 
end 
İlgili konular