Rails的 - 如何保存HAML的HTML输出部分作为字符串发送给外部服务?
-
12-09-2019 - |
题
嗨,这里的第一篇文章,希望你能帮助我。
我们正在使用rake任务生成通讯自动每24小时。还有在通讯,其中管理员可以将自定义消息的顶部的部分。该系统管理员使用系统屏幕具有通讯的实况预览(他们在此坚持),使用部分一个HAML采用一个集合呈现。
为了生成和发送的电子邮件,我们正在发送XML文档给第三方的API,包含(除其他事项外)的,我们想要生成的电子邮件中的HTML。
我想要做的就是保存这个HAML耙子任务中部分的输出,类似于PHP的OB _ *()函数缓冲的东西。有没有办法做一些这样的:
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><html><body>#{newsletter_html}</body></html></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 /渲染护栏-的partials-IN-A-模型或背景任务/
如果您使用的页面或片段缓存,您可以将数据内容从缓存中。要做到这一点最简单的方法是只启用缓存,然后看看那里的文件被放置。
其他提示
从 HAML文档更直接的方法:
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)
不隶属于 StackOverflow