2010-09-10 8 views
21

मेरे पास एक विधि है जो तारों की एक सरणी लेती है और उनसे जुड़ती है ताकि वे ऐसा कुछ कर सकें:मैं ActionMailer विचारों के लिए सहायक तरीके कहां रखूं?

>> my_arr 
=> ["A", "B", "C"] 
>> and_join(my_arr) 
=> "A, B, and C" 

जो मैं अपने मेलर तक पहुंच चाहता हूं ताकि मैं कुछ जानकारी ईमेल में आउटपुट कर सकूं। मुझे इसे रखने और इसे application_helper.rb फ़ाइल में डालने के लिए एक अच्छी जगह नहीं मिल रही है और इसे वहां नहीं मिला है। इसे कहाँ जाना चाहिए?

+3

रेलों द्वारा प्रदान किए जाने वाले सरणी के लिए 'to_sentence' एक्सटेंशन विधि को देखने के लायक मूल्य। – Shadwell

+0

@Shadwell, इसे एक उत्तर के रूप में पोस्ट करें और मैं इसे +1 कर दूंगा। यह वहीं है जिसे मैं ढूंढ रहा था। – DJTripleThreat

+0

इसी तरह की एक - http://amolnpujari.wordpress.com/2013/12/27/highlight-changes-being-made-on-activerecord-object-inside-mail/ –

उत्तर

62

# mailer_helper.rb 
module MailerHelper 
    def and_join(arr) 
    # whatever … 
    end 
end 

# my_mailer.rb 
class MyMailer < ActionMailer::Base 
    helper MailerHelper 
    … 
end 

उपयोग करने के लिए तो आप के रूप में अच्छी विचारों में तरीकों का उपयोग कर सकते हैं सहायक वर्ग को परिभाषित करने के लिए अपने मेलर में helper विधि का उपयोग करें।

+0

बहुत बढ़िया, यह काम किया! – DJTripleThreat

+4

ग्रेट। 'MyMailer

10

रेलवे प्रदान करता है कि सरणी के लिए to_sentence विस्तार विधि को देखने लायक होगा।

आप सहायक फ़ाइल में मॉड्यूल बजाय वर्ग उपयोग करने के लिए:

+0

+1 के अलावा 'माई मेलर' (एक विषय फ़ॉर्मेटर) में सहायक विधियों का उपयोग करने के लिए उस टिप के लिए धन्यवाद। – DJTripleThreat

4

+1, ठीक है, बस एक छोटी सी सुधार काम किया

# mailer_helper.rb 
module MailerHelper 
    def and_join(arr) 
    # whatever … 
    end 
end 
4

एक पहले से ही उत्तर प्रश्न है, लेकिन मैं अन्य SO प्रतिक्रियाओं से संशोधित करने के लिए कहां/क्या फ़ाइल नहीं मिली।

एप्लिकेशन के नीचे/config/initializers/devise.rb आप इस जोड़ सकते हैं: यहां तरीका देखें: मैंने किया है

Devise::Mailer.class_eval do 
    helper :application # includes "ApplicationHelper" 
end 

यह उदाहरण/ऐप्स/सहायकों/application_helper में तरीकों में शामिल होगा। rb। आप इसके बजाय एक और सहायक फ़ाइल शामिल कर सकते हैं - यदि, उदाहरण के लिए, विधि केवल मेलर के लिए है या केवल एक अन्य नियंत्रक के लिए उपयोग की जाती है। जिस डिफ की मुझे आवश्यकता है वह पूरी तरह से उपयोग की जाती है, इसलिए मैंने उस फ़ाइल में डाल दिया ताकि सभी विचार इसे एक्सेस कर सकें।

include ApplicationHelper 
helper :application 

और फिर सिर्फ सामान्य रूप से विधि का उपयोग करने के लिए आगे बढ़ें:

0

मेरे मामले में, रेल 5.1 के लिए, मैं उपयोग करने के लिए दोनों को शामिल और सहायक तरीकों, इस तरह था।

class MyMailer < ActionMailer::Base 
    include ApplicationHelper 
    helper :application 

    def my_mailer_method 
    my_helper_method_declared_in_application_helper 
    .. 
    end 
end 
संबंधित मुद्दे