【问题标题】:Can I Use Multiple Preprocessors on Rails Views?我可以在 Rails 视图上使用多个预处理器吗?
【发布时间】:2012-03-22 13:04:54
【问题描述】:

使用 Rails 3.2,您可以通过附加多个文件扩展名使资产管道中的文件使用多个预处理器,因此:index.css.scss.erb

我尝试使用视图 (index.html.slim.erb) 执行此操作,但它似乎不知道该怎么做(更准确地说,它根本没有找到视图)。

Rails 真的不通过 Tilt 传递视图吗?有没有另一种方法可以让视图通过一个预处理器然后另一个?

(上下文:我正在处理一些旨在修改返回之前输入的 HTML 的东西,所以我希望它在 haml/slim/erb 之后运行。)

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    确实,你不能。 Rails 不对视图模板使用倾斜。

    这样做会很复杂的一个原因是,在正常操作中,ERB 实际上“编译”为 ruby​​ 代码,而不是文本,以提高性能。即,erb 模板编译一次以生成实时 ruby​​ 代码,然后在每次需要在不同的上下文中显示时执行。

    我不知道内置的方式来做你想做的事。你当然可以自己动手。没有人说你必须调用“render 'template'”来渲染。别忘了你总是可以的

    render :text => any_method_that_returns_a_string
    

    你可以自己通过 Tilt 传递东西。与 Rails 通常所做的相比,您可能会看到一些性能下降。

    【讨论】:

    • 我猜你提到的性能问题是为什么最好预编译资产,而不是在请求时构建它们?无论如何,听起来很合理。就我而言,我正在寻找特定于邮寄者使用的模板的东西,因此性能并不是什么大问题。你认为这个事实(邮件)有什么影响吗?
    • 对什么有影响?我不知道。据我所知,仍然没有内置的方法来做到这一点。
    • 我在想也许邮寄者处理视图的方式不同,但这似乎很愚蠢,不是我大声说出来。我想我已经找到了一种使用 ActionMailer::Base.register_interceptor 来做我想做的事情的方法。
    • @jrochkind 看看stackoverflow.com/a/16246891/619510,我照你说的做了,但它看起来又糟糕又脆弱。无论如何,非常感谢,如果没有你的回答就无法解决这个问题,在我阅读本文之前,我不知道模板处理程序和预处理器是不同的东西。
    • 如果您希望每个请求都评估 CSS 中的 ERB...这与 Rails 资产管道不兼容。 Rails 资产管道在“安装时”将所有 CSS 编译成一个静态文件,它不能为每个请求重新评估它。您没有说那是您在原始问题中尝试做的事情,但如果这是您想要做的事情,您就不能使用资产管道(您可能需要重新考虑)
    猜你喜欢
    • 2015-07-12
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2011-05-31
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多