在中间人中在整个页面上执行Ruby方法



在我的中间人构建的网站上,我需要对所有页面(模板(的内容执行特定的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 参数即可。

最新更新