我们是否应该使用除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
处有一张图片。但是,如果我转到以下任何网址,我仍然看不到我的图片:
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
答案 0 :(得分:103)
我自己就是这个问题。 3点,希望有所帮助:
app/assets/images
目录中,那么您应该可以直接调用图像,路径中没有前缀。即。 image_url('logo.png')
background-image:
属性,那么您的代码行应为background-image: image-url('logo.png')
。这适用于less和sass样式表。如果您在视图中内联使用它,那么您将需要使用rails中的内置image_tag
帮助程序来输出图像。再一次,没有前缀<%= image_tag 'logo.png' %>
rake assets:precompile
生成资产,或rake assets:precompile RAILS_ENV=production
生产资产,否则,生产环境在加载页面时不会有指纹资产。对于第3点中的那些命令,如果您正在运行bundler,则需要使用bundle exec
作为前缀。
答案 1 :(得分:61)
您的第一个配方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);
这将导致您的CSS查找具有相同相对路径的文件(在本例中为/ assets)。
答案 2 :(得分:8)
我刚刚发现,通过使用asset_url
帮助程序,您可以解决该问题。
asset_url("backgrounds/pattern.png", image)
答案 3 :(得分:7)
我遇到了类似的问题,尝试使用内联css添加背景图片。由于资产同步的工作方式,无需指定images文件夹。
这对我有用:
background-image: url('/assets/image.jpg');
答案 4 :(得分:4)
Rails 4.0.0将使用与您的css文件相同的目录结构中的image-url
查看定义的图像。
例如,如果assets/stylesheets/main.css.scss
中的css,image-url('logo.png')
变为url(/assets/logo.png)
。
如果您将css文件移至assets/stylesheets/cpanel/main.css.scss
,image-url('logo.png')
将变为/assets/cpanel/logo.png
。
如果要直接在assets / images目录下使用image,可以使用asset-url('logo.png')
答案 5 :(得分:3)
用于样式表: URL(asset_path( 'image.jpg的'))
答案 6 :(得分: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"