Rails资产管道路径在运行时Javascript

时间:2013-08-17 15:48:34

标签: javascript ruby-on-rails asset-pipeline manifest assets

我有一个JavaScript文件,它使用从rails模型生成的JSON文件,并由控制器放入页面。

在这个JSON文件中有许多节点,每个节点都有一个id,我需要将其转换为图像路径。在开发中,我知道图像将在哪里,所以我可以遍历do:

var imagePath = 'some/path/'+node.id+'.png';

但是我使用的是指纹识别,所以在分段和制作时我需要一种方法来解决这条指纹到路径的路径。

据我所知,我需要公开一个路径图 - 指纹路径,这样我才能有效地做这样的事情:

var fingerprintedImagePath = fingerprintedPathsMap[imagePath];

为了做到这一点,我需要访问清单或任何Rails存储清单,从我的控制器或视图中(在.erb标记内)。

如何访问指纹文件列表?或者是否有更好的方法可以让JavasScript访问仅在客户端知道的资产路径。

1 个答案:

答案 0 :(得分:1)

对这种方法并不完全满意,但这就是我所拥有的:

注意:Gon gem将对象插入dom,以便JavaScripts可以访问它们。

在我的控制器中:

gon.asset_host = Rails.configuration.action_controller.asset_host || ''
gon.manifest = Rails.configuration.assets.digests

在我的JavaScript中:

var manifest =  gon.manifest;
var fileName = panelName+'_'+layerName+'.png';
var image_path = 'resources/comics/'+comicName+'/'+fileName;
var hosted_path = image_path;
if(gon.asset_host) {
  var fingerprinted_path = manifest[image_path];
  hosted_path = gon.asset_host+'/assets/'+fingerprinted_path;
}else{
  hosted_path = '/assets/'+hosted_path;
}