2010-01-07 20 views
29

के लिए स्ट्रिंग करने के लिए रेल दृश्य को प्रस्तुत करना मैं हर रात मध्यरात्रि में एक टेबल से ईमेल भेजना चाहता हूं, इसलिए मैंने सभी संचारों को ट्रैक करने के लिए एक मॉडल बनाया है। यह Communication मॉडल स्टोर करता है जो पत्र, से, और पत्र की सामग्री HTML के रूप में भेजा जाना है। उपयोगकर्ता मिलान करने के लिए एक मानदंड में प्रवेश करता है जिसके लिए पत्र का इरादा है: राज्य, देश, पसंदीदा रंग, और इसलिए स्वीकार्य मैचों की सूची लौटाती है।ईमेल

स्वीकार्य मैचों की यह सूची पूरी तरह से भर दी जाती है और प्रत्येक के लिए एक नया संचार उत्पन्न होता है। मध्यरात्रि में डिलीवरी के लिए डेटाबेस में स्टोर करने के लिए मैं स्ट्रिंग में आंशिक दृश्य की सामग्री कैसे प्रस्तुत करूं।

@communication = Communication.new(params[:communication]) 
@communication.body = //Render Partial with local variables to string here 

8 जनवरी, 2010: मैं समाधान न्युट्रीनो द्वारा प्रस्तावित क्रियान्वित किया है, और मेरे कोड इस तरह दिखता है:

@communication.message_body = render_to_string(
    :partial => "letters/small_letter", 
    :locals => { :quote => @quote}) 

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

उत्तर

39

के रूप में (लगभग) हमेशा रेल में, वहाँ उस के लिए एक विधि है: ActionController::Base#render_to_string

रेल 3 में, इस पद्धति AbstractController::Rendering#render_to_string ले जाया गया था।

+0

जहां तक ​​मुझे पता है, सक्रिय दृष्टिकोण संदर्भ होने की आवश्यकता है, और अन्य चीज़ों के साथ रेक कार्यों के लिए काम नहीं करता है। – tadman

+0

मैं संचार नियंत्रक से आंशिक प्रतिपादन कर रहा हूं, और इसलिए मेरा एक संदर्भ है। यह समाधान अद्भुत काम करता है, धन्यवाद। – nixterrimus

+2

ऐसा लगता है कि विधि को हटा दिया गया है – avioing

-1

क्या आपने action mailer को आजमाया है? यह आपके विचार प्रस्तुत करेगा और सक्रिय रिकॉर्ड समर्थन भी प्रदान करेगा।

11

आप तकनीक को देखने के लिए इस तरह के रूप में एक नियंत्रक के बाहर एक टेम्पलेट रेंडर करने के लिए, कर सकते हैं:

http://geek.swombat.com/rails-rendering-templates-outside-of-a-contro

कहा जा रहा है, यह शायद का उपयोग करना बेहतर है अंतर्निहित ईमेल वर्ग भेजने एक्शनमेलर :: बेस जो आपके लिए टेम्पलेट प्रस्तुत कर सकता है। अपने संचार मॉडल में पैरामीटर को संग्रहीत करना शायद आपके अनियंत्रित HTML को संग्रहीत करने से बेहतर है, क्योंकि इन पैरामीटर को क्रमबद्ध किया जा सकता है और बाद में "send_X_notification" टाइप कॉल में वापस धकेल दिया जा सकता है।

ये जनरेटर का उपयोग बनाया जा सकता है:

script/generate mailer communications_mailer 
+0

हाँ, यह एक बेहतर उत्तर है –

+0

धन्यवाद, यह उत्कृष्ट दिखता है।संचार मॉडल के साथ मेरा विचार यह था कि यह मेरे लिए बड़ी संख्या में ईमेल बनाने के लिए आसान बनाता है जिसे भेजने की आवश्यकता होती है और फिर मध्यरात्रि जैसे निर्दिष्ट समय तक उन्हें भेजने के लिए प्रतीक्षा करें। क्या मेरे संचार मॉडल और एक्शन मेलर दोनों का उपयोग करना समझदारी होगी? ईमेल करने के लिए ActionMailer का उपयोग करने के लिए – nixterrimus

+0

+1! यदि आप चीजों को असंकालिक रूप से करने की योजना बना रहे हैं, तो आप पृष्ठभूमि नौकरी नियंत्रण में देखना चाह सकते हैं, उदाहरण के लिए देरी_job – jamuraa

5

आप इस (रेल कंसोल में) की कोशिश कर सकते:

class StaticRender < ActionController::Base 
    def self.render_erb(template_path, params) 
     view = ActionView::Base.new(ActionController::Base.view_paths, {}) 
     class << view 
     include ApplicationHelper 
     end 
     view.render(:file => "#{template_path}.html.haml", :locals => params, :layout => false) 
    end 
    end 


StaticRender.render_erb("home", {}) 

आपको लगता है कि के लिए दृश्य "घर" की आवश्यकता है .. ..