在没有Rails的情况下调用ERB:未定义的方法'raw'

时间:2011-10-31 06:12:11

标签: ruby-on-rails ruby erb

我正在使用ERB engine生成我的Rails网站页面的离线HTML版本。当Rails显示时,页面显示效果很好,但我自己生成ERB时遇到了麻烦(尽管使用相同的ERB模板)。

首先我收到了错误undefined method 't',我用<%=t(...)%>替换所有<%=I18n.translate(...)%>次来解决了这个错误。

现在我得到undefined method 'raw'。我应该用其他东西替换所有<%=raw(...)%>个电话吗?如果有,那是什么?

2 个答案:

答案 0 :(得分:6)

raw被定义为actionpack / action_view库中的帮助程序,因此如果没有rails,则无法使用它。但ERB模板显示其输出没有任何转义:

require 'erb'
@person_name = "<script>name</script>"
ERB.new("<%= @person_name %>").result # => "<script>name</script>" 

因为这是为了逃避,所以有ERB::Util#html_escape方法

include ERB::Util
ERB.new("<%= h @person_name %>").result # => "&lt;script&gt;name&lt;/script&gt;" 

答案 1 :(得分:0)

虽然@warhog的答案有效,但include不是必需的。它将所有ERB :: Util方法添加到当前类中,这通常是不希望的,并且可能导致意外的副作用(例如,如果您有另一个h方法)。相反,只需使用ERB :: Util类访问h方法(或其他帮助器):

ERB.new("<%= ERB::Util.h @person_name %>").result