嗨,这里的第一篇文章,希望你能帮助我。

我们正在使用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>&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 /渲染护栏-的partials-IN-A-模型或背景任务/

如果您使用的页面或片段缓存,您可以将数据内容从缓存中。要做到这一点最简单的方法是只启用缓存,然后看看那里的文件被放置。

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

其他提示

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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top