我开发了一个带练习的rails应用程序(适用于数学方面有学习困难的孩子)。练习的互动部分用javascript编写。我将每个练习存储在数据库中。 javascript包含
<%= asset_path('to_images') %>
我可以将脚本读入控制器并将内容写入部分内容,但我认为最好在变量中捕获脚本,例如:
@animation = exercise.animation
其中包含&lt;%= asset_path(...)%&gt;的任何代码将被替换为资产的正确指纹路线。
以下是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"
});
我已经尝试
了class Exercise < ActiveRecord::Base
include ActionView::Helpers::AssetUrlHelper
和
self.animation.gsub(/\<\%\=\s*asset_path\((.+)\)\s*\%\>/) do |match|
address = $1
puts "#{address}"
=> "exercises/shapes/circles/circle_open_black_48.png"
puts "#{asset_path(address)}"
=> /"exercises/shapes/circles/circle_open_black_48.png"
puts "#{ActionController::Base.helpers.asset_path(address)}"
=> /"exercises/shapes/circles/circle_open_black_48.png"
end
不产生我需要的结果。 谢谢你的建议!
答案 0 :(得分:2)
获取MD5指纹值的一种方法是使用Sprockets&#39; 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">
您可以在此对象上调用digest_path
,以便将MD5
总和附加到资源。
[1] pry(main)> Rails.application.assets.find_asset('application.js').digest_path
=> "application-ab07585c8c7b5329878b1c51ed68831e.js"
有了这些知识,您可以创建一个帮助程序来返回应用程序中任何资产的digest_path
,从您的.js.erb
文件或模型中调用此帮助程序。