如何将外部 .js 文件的内容写入 js.haml 文件(Ruby on Rails)

How to write the content of external .js files in a js.haml file (Ruby on Rails)

我在 Rails 框架上使用 Ruby,我喜欢它。

到目前为止,我一直在使用 show.html.haml 作为我的视图,一切正常。我们想添加另一个支持 GET 请求的选项,其中包含 post-fix .js。为此,我们向控制器添加了另一个名为 show.js.haml 的并行视图。 Rails 的 "magic" 知道将 .html post-fix 请求路由到第一个,将 .js post-fix 请求路由到后者。

问题是当请求被路由到 show.js.haml 视图时,我无法找到一种方法来写入 外部 .js 文件的内容。我得到的只是文本本身(即 <script src="myscripts.js" type="text/javascript"></script>),而不是文件的实际内容。

我找到了一个解决方案,但肯定不是最优的(性能、稳健性等):将文件下载到服务器并使用以下函数:

!= File.open(Rails.root.join('public' , 'js',  'jquery-1.11.2.min.js'), 'rb').read

这是我发现实际写入 .js 文件内容的唯一方法。

必须有一种Ruby的优雅方式将外部.js文件的内容写入.js.haml文件。

如有任何帮助,我们将不胜感激。 谢谢!

我认为您需要的是 rails 资产管道 http://guides.rubyonrails.org/asset_pipeline.html

我不确定你为什么需要这个以及这对哪种情况是个好主意,但你可以试试这个(未经测试):

# show.js.haml

// some javascript
= render file: Rails.root.join('public' , 'js',  'jquery-1.11.2.min.js')
// or
"#{render file: Rails.root.join('public' , 'js',  'jquery-1.11.2.min.js')}"

当然这只适用于可访问的本地资源,但是嘿,这就是 <script src= 的目的。

编辑

如果需要将文件内容作为字符串存储在变量中,可以使用capture。对于远程文件,您可以使用 open-uri,它是 Ruby 标准库的一部分。

# show.js.haml
- content = capture do
- render file: Rails.root.join('public' , 'js',  'jquery-1.11.2.min.js')

# for remote files
- content = open('http://url.to/file.js').read

您可以稍后打印内容:

= content