在我的中间人构建的网站上,我需要对所有页面(模板(的内容执行特定的Ruby代码。
例如,如果我的config.rb
中有以下助手:
def myexample(text)
text.gsub("dog","cat")
end
在我的test.html.haml
:
= myexample("Some text about a dog.")
我预览和生成的/test.html
内容如下:
Some text about a cat.
但是,我正在使用几种不同的方法来输出需要修改的文本,最明显的是通过 HAML 的:markdown
过滤器,所以我不希望将所有内容包装在= myexample("Text")
帮助程序中。
我希望能够运行 Ruby 代码,该代码将所有页面的内容(最好(或生成的 HTML 输出(如果第一个选项是不可能的(作为传递给此类帮助程序的参数。
理想情况下,此代码将在开发和构建环境中运行,但如果这是不可能的,则构建就足够了。
可以这样做吗?
附言。在我的特定情况下,我使用速记符号来引用其他页面,然后使用正则表达式和eval()
以便将它们替换为数据文件中的相对链接。
ActionController::Base 具有render_to_string
方法,该方法将为您提供呈现部分或页面的正常 HTML 输出,但采用字符串格式。这将允许您获取渲染的 HTML 并对其进行修改,然后再最终将其真正呈现为内联模板。
在控制器中:
rendered_html = render_to_string 'your_template_or_partial'
# do stuff to rendered_html
render inline: rendered_html.html_safe, layout: 'layouts/application'
html_safe
方法确保 Rails 知道将其呈现为 HTML 是安全的。如果正在呈现用户输入并且您尚未对其进行清理,则您不希望执行此操作!!!
如果您不希望它在渲染时使用布局,只需删除 :layout 参数即可。