我希望从控制器渲染.js.coffee
视图,其中包含lib/assets/javascripts
目录中的另一个js文件:
#= require doc_ready
因为我想通过绝对网址引用该文件,所以不会改变。 Rails 4.0只使用像embed-dc589fbef3832d9c38a4fbbc4b021f59.js
这样的摘要编译资产,我想使用相同的URL(并可能根据时间使缓存文件到期),即使我对脚本进行了更改。
因为我想在其他网站上外部使用该脚本,并且我提供给该网站的网站管理员的代码不得更改。
我是否可以通过制作一个.js.coffee
视图的控制器操作来实现这一目标,该视图从库中编译并包含其他所需的js文件,就像编译资产时sprocket一样?
答案 0 :(得分:1)
使用重定向,如下所示:
def show
redirect_to view_context.javascript_path('embed.js.coffee')
end
有一种方法可以渲染整个js文件:
def show
render text: Rails.application.assets.find_asset('embed.js.coffee').body
end
答案 1 :(得分:1)
我设法找到了一种方法,使用this answer。
控制器不受影响:
class Widgets::EmbedJsController < ActionController::Base
def embedded_script
end
end
在coffeescript视图中,我有&#34;要求&#34;像这样的另一个文件:
`<%= raw Rails.application.assets['doc_ready'].body %>`
似乎在本地工作,我很快就会在生产中进行测试。
这也可以通过直接从控制器提供Rails.application.assets['widgets/embed'].body
来重构,这应该编译coffeescript但尚未测试它。
答案 2 :(得分:0)
另一种方法是将资产的摘要版本符号链接或复制到某个常量路径(并将其提供给第三方)。这样做的好处是请求根本不应该访问rails(因为这些应该由Web服务器直接提供。
自动执行此操作相对简单 - 我知道这两个库是