101

我们应该image-url在 Rails 4 中使用其他东西吗?它们返回似乎没有意义的不同值。如果我有logo.png并且/app/assets/images/logo.png我执行以下操作,这就是我得到的:

image-url("logo.png") -> url("/images/logo.png") #obviously doesn't work
image-path("logo.png") -> "/images/logo.png"
asset-url("logo.png") -> url("/logo.png")

当然,这些都不起作用,因为它们至少需要/assets在前面。

更新:实际上,我刚刚注意到,如何在 Rails 4 中访问图像?我在/app/assets/images/logo.png. 但是,如果我访问以下任何一个 URL,我仍然看不到我的图像:

http://localhost:3000/assets/logo.png
http://localhost:3000/assets/images/logo.png
http://localhost:3000/logo.png
http://localhost:3000/images/logo.png

更新2:我可以提出我的唯一方法logo.png是将其移动到/app/assets/stylesheets目录中,然后拉起:

http://localhost:3000/assets/logo.png
4

7 回答 7

117

我自己也有这个问题。希望有帮助的3点:

  • 如果您将图像放在app/assets/images目录中,那么您应该能够直接调用图像,路径中没有前缀。IE。image_url('logo.png')
  • 根据您使用资产的位置,将取决于方法。如果您将其用作background-image:属性,那么您的代码行应该是background-image: image-url('logo.png'). 这适用于 less 和 sass 样式表。image_tag如果您在视图中内联使用它,那么您将需要使用rails 中的内置帮助程序来输出您的图像。再一次,没有前缀<%= image_tag 'logo.png' %>
  • 最后,如果您正在预编译资产,请运行rake assets:precompile以生成资产或rake assets:precompile RAILS_ENV=production用于生产,否则,您的生产环境在加载页面时将没有指纹资产。

bundle exec同样对于第 3 点中的那些命令,如果您正在运行 bundler ,则需要在它们前面加上前缀。

于 2013-11-26T07:32:23.920 回答
65

你的第一个公式image_url('logo.png')是正确的。如果找到图像,它将生成路径/assets/logo.png(加上生产中的哈希)。但是,如果 Rails 找不到您命名的图像,它将回退到/images/logo.png.

下一个问题是:为什么 Rails 没有找到你的图像?如果你把它放在 app/assets/images/logo.png 中,那么你应该可以通过http://localhost:3000/assets/logo.png.

如果这样可行,但您的 CSS 没有更新,您可能需要清除缓存。从您的项目目录中删除tmp/cache/assets并重新启动服务器(webrick 等)。

如果失败,您也可以尝试使用background-image: url(logo.png);That 将导致您的 CSS 查找具有相同相对路径(在本例中为 /assets)的文件。

于 2013-11-24T19:00:44.963 回答
10

我刚刚发现,通过使用asset_urlhelper 可以解决这个问题。

asset_url("backgrounds/pattern.png", image)
于 2013-06-10T20:37:37.263 回答
8

我遇到了类似的问题,尝试使用内联 css 添加背景图像。由于资产同步的工作方式,无需指定图像文件夹。

这对我有用:

background-image: url('/assets/image.jpg');
于 2015-03-16T17:21:35.593 回答
5

Rails 4.0.0 看起来像定义image-url在与您的 css 文件相同的目录结构中的图像。

例如,如果您的 css in assets/stylesheets/main.css.scssimage-url('logo.png')则变为url(/assets/logo.png).

如果将 css 文件移动到assets/stylesheets/cpanel/main.css.scssimage-url('logo.png')则变为/assets/cpanel/logo.png.

如果要直接在 assets/images 目录下使用 image,可以使用asset-url('logo.png')

于 2013-11-25T12:15:07.307 回答
5

对于样式表: url(asset_path('image.jpg'))

于 2016-05-27T04:48:10.010 回答
0

如果有人来寻找如何从rails 控制台生成相对路径

ActionView::Helpers::AssetTagHelper
image_path('my_image.png')
=> "/images/my_image.png"

或者控制器

include ActionView::Helpers::AssetTagHelper
image_path('my_image.png')
=> "/images/my_image.png"
于 2021-02-01T06:49:19.643 回答