2014-05-17 9 views
24

मेरे पास एक नया नया रेल 4.1.1 ऐप है जहां मैं डेविस ईमेल को अनुकूलित कर रहा हूं। मैं उन्हें नई रेल ईमेल पूर्वावलोकन सुविधा पर प्रदर्शित करना चाहते हैं तो मैंने किया था निम्नलिखित:रेल 4.1 मेलर पूर्वावलोकन और कस्टम ईमेल

config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews" 

2) अपने कस्टम ईमेल UserMailer वसीयत में निर्मित:

1) मेरी config/development.rb फाइल करने के लिए निम्नलिखित स्निपेट जोड़ा गया app/mailers/user_mailer.rb:

class UserMailer < Devise::Mailer 
    helper :application # gives access to all helpers defined within `application_helper`. 
    include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url` 

    layout "notifications_mailer" 
end 

3) बदल दिया config/initializers/devise.rb निम्नलिखित स्निपेट शामिल करने के लिए:

अब तक तो अच्छा

class UserMailerPreview < ActionMailer::Preview 
    def confirmation_instructions 
    UserMailer.confirmation_instructions(User.first, {}) 
    end 

    def reset_password_instructions 
    UserMailer.reset_password_instructions(User.first, {}) 
    end 

    def unlock_instructions 
    UserMailer.unlock_instructions(User.first, {}) 
    end 
end 

,:

4) lib/mailer_previews को निम्नलिखित सामग्री के साथ वर्ग UserMailerPreview जोड़ा गया। ऐसा लगता है कि मैंने सब ठीक किया है। लेकिन तब मैं/रेल/मेलर्स/user_mailer/confirmation_instructions मार्ग पर confirmation_instructions ईमेल के लिए पूर्वावलोकन देखने के लिए कोशिश करते हैं और मैं निम्नलिखित त्रुटि मिलती है:

undefined method `confirmation_url' for #<#<Class:0x007fa02ab808e0>:0x007fa030fb7e80> 

मेरी confirmation_url.html.erb टेम्पलेट के लिए कोड इस तरह दिखता है:

<%= t("notifications.texts.greeting") + @user.display_name %>, 

<p>You can confirm your account email through the link below:</p> 

<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @token) %></p> 

मैं क्या गलत कर रहा हूं? मुझे लगता है कि जिस तरह से मैं confirmation_url विधि को कॉल करता हूं, उससे कुछ गलत है। कोई भी मेरी मदद कर सकता है?

+0

आप 'confirmation_url' कहां कहते हैं? क्या आप प्रासंगिक कोड साझा कर सकते हैं जहां आपको यह त्रुटि मिल रही है। दृश्य में –

+0

आह। – rodrigoalves

+0

पोस्ट को अपडेट किया गया मैंने @ स्टील के सुझावों का पालन किया और इसे काम कर लिया। परिवर्तनों को प्रभावी होने के लिए मुझे सर्वर को पुनरारंभ करना पड़ा। – Besi

उत्तर

5

मुझे यह प्रश्न मिला क्योंकि मैं यह समझने की कोशिश कर रहा था कि डेविस ईमेल का पूर्वावलोकन कैसे करें। मैंने आपके कोड को लगभग बिल्कुल कॉपी किया है और यह मेरे लिए ठीक काम करता है।

एकमात्र चीज मैंने अलग-अलग किया था UserMailer से - जब मैंने इसे शामिल किया तो मुझे एक त्रुटि संदेश Missing template layouts/notifications_mailer मिला। यदि आप इसे हटाते हैं तो क्या होता है?

लाइन Devise::Controllers::UrlHelpers निश्चित रूप से विधि confirmation_url (आप खुद के लिए देख सकते हैं रेल कंसोल खोलने और फिर confirmation_urlinclude Devise::Controllers::UrlHelpers चलाकर शामिल हैं, इसलिए मुझे लगता है समस्या यह है कि आपके पूर्वावलोकन UserMailer से बिल्कुल भी गाया नहीं किया जा रहा है। मुझे यकीन है कि क्यों नहीं कर रहा हूँ, लेकिन लाइन layout "notifications_mailer" अपराधी हो सकता है।

आप एक वर्ग NotificationsMailer कहा जाता है? वहाँ में Devise::Controllers::UrlHelpers सहित करता है ईमेल वसीयत पूर्वावलोकन करने के लिए उपयोग किए बिना देख उन लोगों के लिए अपनी समस्या को हल?

31

करें कस्टम मेलर रों, (लेकिन अभी भी कस्टम ईमेल) इस मैं क्या किया है (रेल> = 4.1 में काम करता है):

  1. ईमेल पूर्वावलोकन के लिए अपने अनुप्रयोग को कॉन्फ़िगर करें।

  2. वसीयत मेलर पूर्वावलोकन वर्ग

    # mailer/previews/devise_mailer_preview.rb 
    class Devise::MailerPreview < ActionMailer::Preview 
    
        def confirmation_instructions 
        Devise::Mailer.confirmation_instructions(User.first, "faketoken") 
        end 
    
        def reset_password_instructions 
        Devise::Mailer.reset_password_instructions(User.first, "faketoken") 
        end 
    
        ... 
    
    end 
    
  3. पुनरारंभ सर्वर

+0

आपके उत्तर के लिए धन्यवाद। इसने काम कर दिया। मुझे अभी तक पता नहीं है कि reset_password_instructions का परीक्षण कैसे करें क्योंकि मुझे नहीं पता कि कौन से तर्क पास करना है। पीएस: आपको एक और स्तर को इंडेंट करना होगा क्योंकि कोड सूची में है। – Besi

+0

@ बेसी, प्रारूप सहायता के लिए धन्यवाद। पासवर्ड रीसेट का परीक्षण करने के लिए, बस इसे उपयोगकर्ता और एक स्ट्रिंग पास करें, जैसे: Devise :: Mailer.reset_password_instructions (User.first, "faketoken") – steel

+1

निर्दिष्ट नहीं है, रेल से काम करता है 4.1 – Ben

5

आप वसीयत यूआरएल सहायकों के लिए अपरिभाषित विधि मिल जाएगा जब आप आवश्यक वसीयत मॉड्यूल शामिल करने के लिए भूल गए हैं सेट करें आपके मॉडल में जैसे अगर आपका मॉडल User है और आप confirmation_url चाहते हैं, आप सुनिश्चित करना चाहिए कि :confirmable मॉड्यूल शामिल है:

devise <...snipped...>, :confirmable 
2

रेल 5 का उपयोग करना और वाक्य रचना @ स्टील उत्तम जवाब से थोड़ा अलग, डबल की "उपयोग के साथ पाया: : "अंतर होने:

# Preview all emails at http://localhost:3000/rails/mailers/devise_mailer 
class DeviseMailerPreview < ActionMailer::Preview 

    def reset_password_instructions 
     Devise::Mailer.reset_password_instructions(User.first, "faketoken") 
    end 
end 
संबंधित मुद्दे