2010-12-29 11 views
10

का उपयोग करके स्वागत ई-मेल भेजें, जब कोई उपयोगकर्ता मेरी सेवा में पंजीकरण करता है तो मैं एक स्वागत ई-मेल कैसे भेज सकता हूं?रेल 3: डेविस

इसके अलावा, मैं ई-मेल कैसे बदल सकता हूं: से और: डेविस से विषय फ़ील्ड?

धन्यवाद

उत्तर

16

मैं अधिभावी द्वारा यह किया में विषयों को बदल सकते हैं देवता की पुष्टि! विधि: https://gist.github.com/982181

class User < ActiveRecord::Base 
    devise :invitable, :database_authenticatable, :registerable, :recoverable, 
     :rememberable, :confirmable, :validatable, :encryptable 

    # ... 

    # devise confirm! method overriden 
    def confirm! 
    welcome_message 
    super 
    end 

    # ... 

private 

    def welcome_message 
    UserMailer.welcome_message(self).deliver 
    end 

end 
+7

यदि आप उपयोग नहीं कर रहे हैं तो क्या होगा: पुष्टि योग्य? – Arcolye

+2

यदि यह नहीं है: स्वीकार्य, मैं एक ही विधि का उपयोग करता हूं लेकिन इसे कॉल करता हूं: बाद में –

1

अपने config में देखो/devise.rb

आप अपने स्थान फ़ाइलें (config/स्थानों/devise.en.yml)

5

यह एक महान चर्चा है। विधि को ओवरराइड करने के रूप में बेनोरॉर सुझाव महान काम करेंगे। यदि आपको लगता है कि आप अन्य उपयोगकर्ता घटनाओं को कैप्चर करना चाहते हैं, तो कुछ अन्य लोगों ने सुझाव दिया है कि ऑब्जर्वर क्लास सबसे साफ दृष्टिकोण हो सकता है। यह समाधान रेल 3.0.x और 3.1 के लिए है।

एक पर्यवेक्षक स्थापित करने के लिए, आप अपनी एप्लिकेशन फ़ाइल में निम्नलिखित परिवर्तन करते हैं, इस पर्यवेक्षक को आपके पास पहले से मौजूद किसी अन्य व्यक्ति को जोड़ना।

#app/models/user_observer.rb 
class UserObserver < ActiveRecord::Observer 
    def after_create(user) 
    Notifier.user_new(user).deliver 
    end 
end 

आप एक ककड़ी परीक्षण है कि व्यायाम उपयोगकर्ता फ़ंक्शन बना सकते है, तो आप उस सुविधा के लिए इस चरण जोड़ने और इसे का बैकअप लेने के साथ कर सकते हैं:

#config/application.rb 
config.active_record.observers = :user_observer 

फिर मॉडल निर्देशिका में एक नई फ़ाइल बनाना परीक्षण मेल सरणी में एक ईमेल की जांच करने के लिए एक कार्यकर्ता कदम।

#features/users/sign_up.feature for example 
Scenario: User signs up with valid data 
    ... 
    And I should receive an email with "[Text from your welcome message]" 


#features/common_steps.rb 
Then /^I should receive an email with "([^"]*)"$/ do |value| 
    # this will get the most recent email, so we can check the email headers and body. 
    ActionMailer::Base.deliveries.should_not be_empty 
    @email = ActionMailer::Base.deliveries.last 
    @email.body.should include(value) 
    #@email.from.should == ["[email protected]"] 
end 

आप वातावरण/test.rb भेजने के बजाय एक मेल सरणी के निर्माण के लिए इन सेटिंग्स को होना चाहिए: में (, से आदि के लिए,)

config.action_mailer.delivery_method = :test 
config.action_mailer.perform_deliveries = true 

कहने के लिए आप और अधिक के लिए परीक्षण कर सकते हैं जरूरत नहीं संदेश, लेकिन यदि आप इतने इच्छुक हैं तो यह बीडीडी तरीके से शुरू हो जाएगा।

भी देखें कुछ पुराने StackOverflow अंतर्दृष्टि के साथ इस सवाल में धागे में शामिल हैं:

20

मैं उपयोग नहीं कर सकते "अनुमोदित" इस सवाल का जवाब क्योंकि मैं का उपयोग नहीं देवता: पुष्टि योग्य।

मुझे अन्य समाधान पसंद नहीं आया क्योंकि आपको मॉडल कॉलबैक का उपयोग करना होगा, जो आप कंसोल या एडमिन इंटरफ़ेस में अपना खाता बनाते समय हमेशा स्वागत ईमेल भेज देंगे। मेरे ऐप में सीएसवी फ़ाइल से उपयोगकर्ताओं को बड़े पैमाने पर आयात करने की क्षमता शामिल है। मैं नहीं चाहता कि मेरा ऐप उन सभी 3000ों को एक आश्चर्यजनक ईमेल भेज रहा हो, लेकिन मैं उन उपयोगकर्ताओं को चाहता हूं जो स्वागत ईमेल प्राप्त करने के लिए अपना खाता बनाते हैं। समाधान:

1) ओवरराइड वसीयत के पंजीकरण नियंत्रक:

#registrations_controller.rb 
class RegistrationsController < Devise::RegistrationsController 

    def create 
    super 
    UserMailer.welcome(resource).deliver unless resource.invalid? 
    end 

end 

2) वसीयत आप अपने पंजीकरण नियंत्रक overrode बताएं:

# routes.rb 
devise_for :users, controllers: { registrations: "registrations" } 
बेशक

, आप अनुकूलित कर सकते हैं "UserMailer" और " devise_for: उपयोगकर्ता "आप जिस मॉडल नाम का उपयोग कर रहे हैं उससे मेल खाते हैं।

+1

गैर-उपयोगकर्ताओं के लिए डेविस के साथ काम करने के लिए, आपको इसके बजाय 'संसाधन' का उपयोग करने की आवश्यकता है: 'पंजीकरण मेलर। स्वागत (संसाधन)। डेलिवर resource.persisted? ' – indirect

+0

इस वाक्य में, मेल पंजीकरण भेजा जाता है भले ही उपयोगकर्ता पंजीकरण अपूर्ण है। –

+2

कोई भी ठीक नहीं है। 'जब तक @ user.invalid?' यह सुनिश्चित करता है कि पंजीकरण तब तक नहीं भेजा जाता जब तक कि पंजीकरण पूरा नहीं हो जाता। – Arcolye

संबंधित मुद्दे