【问题标题】:Calling ERB without Rails: undefined method 'raw'在没有 Rails 的情况下调用 ERB:未定义的方法“原始”
【发布时间】:2011-10-31 06:12:11
【问题描述】:

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

首先我收到了错误undefined method 't',我通过将所有<%=t(...)%> 调用替换为<%=I18n.translate(...)%> 来解决它。

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

【问题讨论】:

    标签: ruby-on-rails ruby erb


    【解决方案1】:

    raw 在 actionpack/action_view 库中被定义为 helper,因此如果没有 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;" 
    

    【讨论】:

    • 我更喜欢使用相同的 ERB 文件,而不是一个带有 raw 的文件和一个没有... /跨度>
    • 试试include ActionView::Helpers::OutputSafetyHelper
    • 是的,玛丽安是对的。不要忘记require 'action_view'。如果你使用 3.1.0 之前的 Rails 版本,你应该使用 ActionView::Helpers::RawOutputHelper 而不是 OutputSafetyHelper
    • 我在 Rails 3.0.5 上。在我的 Ruby 文件开头插入 require 'action_view' 后跟 include ActionView::Helpers::RawOutputHelper 解决了这个问题,非常感谢!
    • 只是想插话并对可能最终来到这里的任何人说,因为当搜索RawOutputHelper 时,这总是出现在谷歌的首页上,即使这个问题不相关直接解决您的问题,即 Marian 和 WarHog 是正确的。这将解决任何问题,例如 ActionView::Template::Error(未初始化的常量 ActionView::Helpers::RawOutputHelper)。我有一些包含RawOutputHelper 的旧代码并不断收到该错误。由于它没有显示在应用程序跟踪中,直到我查看完整的堆栈跟踪,我才真正感到困惑。
    【解决方案2】:

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

    ERB.new("&lt;%= ERB::Util.h @person_name %&gt;").result

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      相关资源
      最近更新 更多