Ruby on rails 数据库中的资产路径(带指纹)?

Ruby on rails 数据库中的资产路径(带指纹)?,ruby-on-rails,ruby,ruby-on-rails-4,asset-pipeline,Ruby On Rails,Ruby,Ruby On Rails 4,Asset Pipeline,我开发了一个带有练习的rails应用程序(针对数学学习有困难的孩子)。练习的交互部分是用javascript编写的。我将每个练习存储在数据库中。javascript包含 <%= asset_path('to_images') %> 其中包含的任何代码都将替换为指向资产的正确指纹路径 [1] pry(main)> Rails.application.assets.find_asset('application.js').digest_path => "applicatio

我开发了一个带有练习的rails应用程序(针对数学学习有困难的孩子)。练习的交互部分是用javascript编写的。我将每个练习存储在数据库中。javascript包含

<%= asset_path('to_images') %>
其中包含的任何代码都将替换为指向资产的正确指纹路径

[1] pry(main)> Rails.application.assets.find_asset('application.js').digest_path
=> "application-ab07585c8c7b5329878b1c51ed68831e.js"
下面是exercise.animation中的代码片段示例:

$("#hundred_square td").css({
    backgroundImage: 'url(<%= asset_path("exercises/shapes/circles/circle_open_black_48.png") %>)',
    backgroundSize: "2vw",
    backgroundRepeat: "no-repeat",
    backgroundPosition: "center"
});
$(“#百方td”).css({
背景图像:“url()”,
背景尺寸:“2vw”,
背景重复:“不重复”,
背景位置:“中心”
});
我已经试过了

class Exercise < ActiveRecord::Base
include ActionView::Helpers::AssetUrlHelper
课堂练习

self.animation.gsub(/\/)不匹配|
地址=$1
放入“#{address}”
=>“练习/形状/圆圈/圆圈\u打开\u黑色\u 48.png”
放置“#{asset_path(address)}”
=>/“练习/形状/圆圈/圆圈\u打开\u黑色\u 48.png”
放置“#{ActionController::Base.helpers.asset_路径(地址)}”
=>/“练习/形状/圆圈/圆圈\u打开\u黑色\u 48.png”
结束
不要产生我需要的结果。
谢谢你的建议

获取MD5指纹值的一种方法是使用Sprockets的
find_asset
方法,将逻辑路径传递到您的资产,以获得一个
Sprockets::BundledAsset
实例。比如说

[1] pry(main)> Rails.application.assets.find_asset('application.js')
=> #<Sprockets::BundledAsset:0x3fe368ab8070 pathname="/Users/deefour/Sites/MyApp/app/assets/javascripts/application.js", mtime=2013-02-03 15:33:57 -0500, digest="ab07585c8c7b5329878b1c51ed68831e">
有了这些知识,您可以创建一个帮助器来返回应用程序中任何资产的
摘要路径
,从
.js.erb
文件或模型中调用此帮助器


请参见

您是否正在尝试在Javascript中执行Ruby ERB?为什么要尝试?在.erb文件中,首先处理ruby代码。如果我将javascript代码(包括ruby代码)读入控制器,然后将其写入一个部分,那么所有的工作都非常出色。我明白了,所以您使用的是一个
js.erb
文件。您的问题是该ERB未正确解析为视图中的资产路径,还是您无法访问模型中的helper方法?谢谢Kelseydh。在这种情况下,我没有使用js.erb文件。我将javascript代码存储在数据库中(及其练习)。当我阅读代码时,我希望有一种方法让控制器(甚至更好的是模型)像处理模板一样处理代码,替换代码(我可以这样做),然后将其放入包含指纹的路由中。(参见“我已经尝试过”的最后两段)-我需要一个结果,比如:“url(/assets/exerces/shapes/circles/circles\u open\u black_48-d6e60117aaf82eb468c535ce7705abced4008ddda9010adf30b0c030ad568632.png)”作为旁白,如果您存储在数据库中的任何javascript包含用户输入的结果,我建议不要将JS存储在数据库中,因为这会使您的应用程序容易受到XSS攻击。(例如,如果有人公开从JS执行
alert(“pwned”)
,您可能会遇到问题)
[1] pry(main)> Rails.application.assets.find_asset('application.js')
=> #<Sprockets::BundledAsset:0x3fe368ab8070 pathname="/Users/deefour/Sites/MyApp/app/assets/javascripts/application.js", mtime=2013-02-03 15:33:57 -0500, digest="ab07585c8c7b5329878b1c51ed68831e">
[1] pry(main)> Rails.application.assets.find_asset('application.js').digest_path
=> "application-ab07585c8c7b5329878b1c51ed68831e.js"