Rails中把手模板中的动态asset_path

时间:2013-11-07 09:25:41

标签: ruby-on-rails erb handlebars.js

我有把手模板(* .hbs.jst.erb),我想动态插入asset_path动态如下:

{{#each subjects}}
  <img src="<%= asset_path("icons/subjects/{{slug}}.png") %>"/>
{{/each}}

这将呈现icons/subjects/danse.png而不是assets/icons/subjects/danse.png,但如果我放<img src="<%= asset_path("icons/subjects/danse.png") %>"/>它将生成写html。

知道这是否可行?

1 个答案:

答案 0 :(得分:0)

好的,好消息是你的流程是合法的,因为它在本地运作

问题是Rails uses asset fingerprinting如何使资产保持一致。使用静态资产(使用Heroku或Amazon)时,让所有指纹正常工作至关重要

我们解决这个问题的方式有两个方面:


确保动态加载资产

您已经使用.erb完成了此操作,但为了使资产正确地使用指纹识别,必须动态调用它们,以便Rails可以分配新的文件名,而不是静态名称。

具体来说,您必须使用.scss&amp;每次要调用资产时.erb。这是很多人犯的错误,就像你使用静态CSS一样,RAILS在预编译时无法调用动态路由。这只是您在使用此过程时必须记住的事项

到目前为止,我已经正确地完成了这项工作


正确编制资产

我们预先编制资产的过程有两个方面:

  1. 本地: rake assets:precompile RAILS_ENV=production

  2. <强>的Heroku:

    run the labs command to enable precompiling

    heroku labs:enable user-env-compile -a myapp


    每次部署应用时(并且已更改资产,运行):

    heroku run rake assets:precompile --app [your app name]