html img标签无法正常工作,因为错误的路径生成了Rails 4

时间:2015-09-18 00:00:54

标签: html ruby-on-rails

我的rails应用程序中有一个div标记( new.html.erb ):

<div style="background: url(images/background.jpg) no-repeat;"> 
</div>

图片未显示,我收到ActionController路由错误No route matches [GET] "/locations/images/background.jpg"

问题是Rails正在将locations/添加到文件路径,这是错误的,因为我的图像正确位于 app / assets / images / background.jpg 中。 即使我包含文件的绝对路径,我也会在其开头添加locations

这是我的路线(不确定是否有帮助,但它不会受伤!):

 locations GET    /locations(.:format)          locations#index
              POST   /locations(.:format)          locations#create
 new_location GET    /locations/new(.:format)      locations#new
edit_location GET    /locations/:id/edit(.:format) locations#edit
     location GET    /locations/:id(.:format)      locations#show
              PATCH  /locations/:id(.:format)      locations#update
              PUT    /locations/:id(.:format)      locations#update
              DELETE /locations/:id(.:format)      locations#destroy

1 个答案:

答案 0 :(得分:4)

您需要使用视图中的image_path帮助程序生成网址:

<div style="background-image: url('<%= image_path('background.jpg') %>'); background-repeat: no-repeat">
</div>

帮助程序非常重要,因为在生产过程中,您的资产可以被指纹识别或远程托管(例如在CDN上)。帮助程序将始终生成正确的URL。

修改

要在css文件中引用背景图像,您有两种选择。使用基本轨道,您可以将.erb添加到css文件名的末尾,并使用上面的代码替换。

<强> stylesheet.css.erb:

.myclass {
  background-image: url(<%= asset_path 'background.png' %>);
}

或者,如果您使用sass-rails gem,则可以使用image-urlasset-url帮助者:

<强> stylesheet.scss:

.myclass {
  background-image: image-url('background.png');  // or asset-url('background.png');
}

有关详细信息,请参阅Asset Pipeline Guide