0

我正在尝试覆盖 Sprockets 在 Rails 中生成的路径,特别是对于 sass 助手。

我已经使用各种解决方案到达了某个地方:

a) 覆盖视图中的 image_tag 助手

b) 覆盖 ActionView::AssetPaths 计算函数

c) 在 Sass::Script::Functions 中包含新模块

但感觉应该有比做这一切更简单的方法。有没有装饰链轮路径的好方法?我这样做是因为我们有一些自定义 url 和包装的东西正在发生。

4

1 回答 1

2

所以,最后我发现这条消息埋在 sprockets/context.rb

Custom asset_path helper is not implemented
Extend your environment context with a custom method.

environment.context_class.class_eval do
  def asset_path(path, options = {})
  end
end

这似乎表明 Rails.application.assets.context_class.class_eval 将允许我更改asset_path 处理程序,但它似乎不起作用。我不确定这是否是我的错,因为我找不到任何这样的例子。

目前我得到这个工作的黑客是这样的:

  ActionView::AssetPaths.class_eval do
    def compute_public_path(source, dir, options = {})
      my_transform(source)
    end
  end

  Sprockets::Helpers::RailsHelper::AssetPaths.class_eval do
    def compute_public_path(source, dir, options = {})
      my_transform(source)
    end
  end

  ActionView::Helpers::AssetTagHelper::AssetPaths.class_eval do
    def compute_public_path(source, dir, options = {})
      my_transform(source)
    end
  end

我怀疑我不需要所有这三个,但我不确定。任何了解他们的链轮的人都想对此发表评论吗?

于 2012-09-25T22:13:26.410 回答