我正在将Rails 3应用升级到3.2并设置资产管道。这对css / js来说很棒,但是我并没有真正看到将它用于图像的重点,不幸的是我有大量的参考/images/*.png之类的css等。
有没有办法为图片禁用资产管道,以便image_tag("x.png")
返回<img src="/images/x.png">
而不是<img src="/assets/x.png">
?谢谢!
答案 0 :(得分:4)
你可以修补ActionView :: Base,在rails console中试试这个:
helper.image_path "foo" #=> "/assets/foo"
module OldImagePath
def image_path(source)
asset_paths.compute_public_path(source, 'images')
end
alias_method :path_to_image, :image_path
end
ActionView::Base.send :include, OldImagePath
helper.image_path "foo" #=> "/images/foo"
例如,您可以将其放在初始化程序中。默认情况下,ActionView :: Base包含ActionView :: Helpers :: AssetTagHelper和Sprockets :: Helpers :: RailsHelper,它们都定义了image_path,但后者优先。我包含了我自己的模块,它优先于所有模块(里面的代码来自ActionView :: Helpers :: AssetTagHelper)。
尽管如此,将资产管道用于图像也是有意义的。它们在文件名中获取哈希值,以便它们可以永久缓存在客户端,而无需询问服务器文件是否已更改。
答案 1 :(得分:0)
看看这个宝石: https://github.com/spohlenz/digestion,它应该做你需要的:)。
否则,您可以将不希望包含在资产管道中的资产从app / assets移回公共(例如公共/图像)。一切都应该像你期望的那样工作而不需要宝石。