القضبان - كيفية حفظ إخراج HTML من Haml جزئي كسلسلة لإرسالها إلى خدمة خارجية؟

StackOverflow https://stackoverflow.com/questions/1261422

سؤال

يا شباب، أول مشاركة هنا، آمل أن تتمكن من مساعدتي.

نحن نولد رسالة إخبارية تلقائيا كل 24 ساعة باستخدام مهمة أشعل النار. هناك قسم في الجزء العلوي من النشرة الإخبارية حيث يمكن للمشرف وضع رسالة مخصصة. تحتوي الشاشة التي يستخدمها المشرف معاينة مباشرة من النشرة الإخبارية (كانت إصرارا على هذا)، والتي تم تقديمها باستخدام جزئي من Haml يأخذ مجموعة.

من أجل توليد وإرسال رسائل البريد الإلكتروني وإرسالها، نرسل مستندات XML إلى API لطرف ثالث يحتوي على (من بين أشياء أخرى) HTML للبريد الإلكتروني الذي نود أن يولد.

ما أريد القيام به هو حفظ مخرجات Haml جزئية داخل مهمة أشعل النار، شيء مشابه وظائف التخزين المؤقت ل PHP _ * (). هل هناك أي طريقة لفعل شيء مثل ما يلي:

ob_start();
render :partial => newsletter, :collection => posts
newsletter_html = ob_get_contents()
xml = "
<Creative>
  <Name>Our Newsletter -- #{Time.now.strftime('%m/%d/%Y')}</Name>
  <HTML>&lt;html&gt;&lt;body&gt;#{newsletter_html}&lt;/body&gt;&lt;/html&gt;</HTML>
  ...
</Creative>"

ربما أفتقد شيئا واضحا، ويمكنني أن أفكر في بعض الطرق للقيام بذلك، لكن معظمها ليست جافة ولا أريد أن تولد الكثير من HTML في المساعدين أو النماذج أو المهمة نفسها.

اسمحوا لي أن أعرف إذا كان هناك طريقة بالنسبة لي لإنجاز هذا. شكرا.

هل كانت مفيدة؟

المحلول

طريقة شائعة للقيام بذلك (والتي تنصح عادة ضد) هي تقديم سلسلة في نموذجك أو مهمة أشعل النار:


cached_content = 
  ActionView::Base.new(Rails::Configuration.new.view_path).render(:partial => "newsletter", :locals => {:page => self,:collection => posts})

انظر هنا للحصول على وصف كامل:http://www.compulsivoco.com/2008/10/rendering-rains-partials-in-a-model-or-background-task/

إذا كنت تستخدم صفحة أو مخزئة شظية، فيمكنك سحب المحتوى من ذاكرة التخزين المؤقت. أسهل طريقة للقيام بذلك هي مجرد تمكين التخزين المؤقت، ثم انظر إلى حيث يتم وضع الملفات.

http://guides.rubyonrails.org/caching_with_raina.html.

نصائح أخرى

نهج أكثر مباشرة من مستندات حمل:

require 'haml'
haml_string = "%p Haml-tastic!"
engine = Haml::Engine.new(haml_string)
engine.render #=> "<p>Haml-tastic!</p>\n"

عليك أن تفعل الكثير من العمل تحميل قالب HAML وإنشاء أي متغيرات محلية تحتاج إلى الاستيفاء، ولكن المرونة قد تعوض عن ذلك.

قليلا من تسديدة في الظلام ولكن إذا قمت بتسجيل الخروج من RDOC ل Haml، فمن المحتمل أن يكون له طريقة تقبل سلسلة وبعض المتغيرات ثم تقدم الإخراج.

مع ERB سوف تبدو شيئا مثل:

require 'erb'

name = 'world'
template = 'hello <%= name %>'
template = ERB.new(template)
puts template.result(binding)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top