资产管道路由助手解析错误的URL或路径

5

我在处理所有资产助手时都遇到了问题,除了image_tag之外。它们都生成错误的路径。我正在使用Rails 4.0.0和Ruby 2.0.0。我的图片位于/app/assets/images

例如:

asset_url('this.png')    # -> /this.png
asset_path('this.png')   # -> /this.png
image_url('this.png')    # -> /images/this.png
image_path('this.png')   # -> /images/this.png
image-url('this.png')    # -> /images/this.png
asset-url('this.png')    # -> /this.png
image_tag('this.png')    # -> <img ... src="/assets/this.png" /> <- only correct one

我总是得到错误的URL... 我需要/assets/this.png,它似乎只能由image_tag生成。

这在.haml.scss.erb等文件中都会发生。

我找不到解决这个问题的方法... 有人以前见过这种情况并且知道答案吗?

3个回答

4

我和你一样遇到了同样的问题。我按照这个帖子的指示,通过清除tmp缓存来解决了它。

$ rake tmp:cache:clear

希望这有帮助。


我在erb文件和控制台中从'Rails.application.routes.url_helpers'得到了不同的url。这就是罪魁祸首!我在桌子上留下了一些咬痕... - Ekkstein

1

image_path已被弃用。请查看ApiDock

Method deprecated or moved
This method is deprecated or moved on the latest stable version. The last existing version (v3.2.13) is shown here.

These similar methods exist in v4.0.2:

ActionView::Helpers::AssetUrlHelper#image_path

对于 image_tagdocs 明确说明 返回源的 HTML 图像标记。源可以是完整路径或文件。 因此,在这种情况下,它指向的路径是 /assets/file_name.png 而对于 **image_path**,计算公共图像目录中图像资产的路径。从文档根目录开始的完整路径将被传递。 路径为 /images/filename.png

1
谢谢您解释这个区别!是否有一个类似于image_tag帮助程序计算完整路径的帮助程序?我原本以为image_path会起作用,就像这里的示例一样:http://apidock.com/rails/ActionView/Helpers/AssetUrlHelper/image_path 但是我的image_path结果是AssetTagHelper示例而不是AssetUrlHelper示例。 - Michael Johnston
只是为了澄清:image_path并没有被弃用,只是移动到另一个模块中了。 :) - Gabriel Osorio

0

我在使用新的Rail 4.2.1应用程序进行开发时也遇到了这个问题。我有:

body
{
    background: #EFEFEF image-url('layouts/background.jpg') no-repeat top center fixed;
}

然后SASS愉快地生成了:

body
{
    background: #EFEFEF url('/images/layouts/background.jpg') no-repeat top center fixed;
}

经过几个小时的故障排除,我发现这种行为是由路径拼写错误引起的!我想要的图像所在的目录是layout,而不是layouts
一旦我纠正了路径,url(/assets/layout/background.jpg)就会按预期生成。 更新2015年11月12日 我再次遇到了这个问题,这次是使用image_tag()。我的路径拼写正确(在开发中图像工作正常),但是我省略了文件路径中的“.png”。这在开发中可以正常工作,但显然在生产中不行。一旦我在路径中添加了“.png”,image_tag()就有了正确的路径。
这种行为很荒谬。不确定为什么它会恢复到某些非标准路径(/images而不是/assets),而不是抛出异常(但我也没有费心去查看源代码)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接