在Middleman中的整个页面上执行Ruby方法

在我的Middleman构建的网站上,我需要对所有页面(模板)的内容执行特定的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的:markdownfilter,所以我不希望将所有内容包装在= myexample("Text")帮助器中。

我希望能够运行Ruby代码,该代码将所有页面的内容(最好)或生成的HTML输出(如果第一个选项不可能)作为传递给这种帮助器的参数。

理想情况下,此代码将在开发和构建环境中运行,但如果这不可能,则构建就足够了。

有可能这样做吗?

PS。 在我的特定情况下,我使用简写表示法来引用其他页面然后我使用正则表达式和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参数。