ruby-on-rails-3 - 使用自定义处理程序的 Rails 部分模板正在转义 html

标签 ruby-on-rails-3 actionview ejs

我正在使用客户端中的 JavascriptMVC 和 ejs 模板开发 Rails 3.1 应用程序,以在我的应用程序上执行一些复杂的功能。不幸的是,ejs 语法与 erb 语法非常相似,以至于我无法将代码保存在同一个文件中(尽管如果有人知道这样做的好方法,我会欣喜若狂)。最终,我希望能够在 ejs 模板中应用一些 Rails 代码(比如 I18n),但在这一点上,我将满足于让它工作

遵循 this question 中的示例我创建了一个自定义模板处理程序,如下所示:

module CommonModel
    class Handler < ActionView::Template::Handler
        include ActionView::Template::Handlers::Compilable

        def compile(template)
            template.source.inspect
        end

    end
end

ActionView::Template.register_template_handler :ejs, CommonModel::Handler

然后我创建了一个部分模板,其中包含我的 ejs 代码:
_jmvc_templates.html.ejs
<script type="text/ejs" id="my_ejs_template">
    <div>Some ejs here</div>
</script>

在我现有的模板中,我尝试包含我的部分:
<%= render 'path/to/my/ejs/templates/jmvc_templates' %>

在这一点上,文件被包含并使用了我的处理程序,但一切都被转义了,所以我模板中的 div 被渲染到页面上,如下所示:
&lt;div%gt;

我确定我在这里遗漏了一些明显的东西,但我不知道它可能是什么......我怎样才能让这个模板处理程序只包含我基于 ejs 的模板而不转义其中的所有 html?

编辑:

我发现使用 html_safe 调用 render 有效:
<%= render('path/to/my/ejs/templates/jmvc_templates').html_safe %>

不过,这似乎是一个麻烦 - 必须有一种方法让 erb 渲染器将来自我的处理程序的文本视为 html 安全文本。

最佳答案

也许你应该使用原始的。 Check this

def compile(template)
  raw template.source.inspect
end

关于ruby-on-rails-3 - 使用自定义处理程序的 Rails 部分模板正在转义 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7605211/

相关文章:

ruby-on-rails - Rails 3 : How to add user_id - current_user. id 关联?

ruby-on-rails - rails : Preselect a value in ActionView-Helper 'collection_select'

ruby - ActionView::MissingTemplate - 但模板已经存在?

html - 如何在EJS中的表中的特定单元格中排列数据

ruby-on-rails - Form_for 嵌套对象

ruby-on-rails - yield 和违约情况 ||不输出默认情况

ruby-on-rails - 如何仅在某个命名空间内跳过 application_controller 调用 (ActiveAdmin)

ruby-on-rails - 如何将 Rails View 助手提取到 gem 中?

jquery - 当点击多个帖子具有相同的 div 类和按钮类时获取 img src

javascript - 从 sails js 中的 javascript 文件访问 Controller 对象