Ruby on rails 从控制器渲染js时使用Rails链轮指令
我想从控制器中呈现一个Ruby on rails 从控制器渲染js时使用Rails链轮指令,ruby-on-rails,ruby-on-rails-4,coffeescript,asset-pipeline,sprockets,Ruby On Rails,Ruby On Rails 4,Coffeescript,Asset Pipeline,Sprockets,我想从控制器中呈现一个.js.coffee视图,其中包含lib/assets/javascripts目录中的另一个js文件: #= require doc_ready 为什么视图是由控制器而不是静态资源渲染的? 因为我想通过绝对url引用文件,所以这不会改变。Rails 4.0只编译具有摘要的资产,如embed-dc589fbef3832d9c38a4fbbc4b021f59.js,我希望使用相同的url(并可能根据时间终止缓存文件),即使我对脚本进行了更改 为什么是绝对url? 因为我想在另
.js.coffee
视图,其中包含lib/assets/javascripts
目录中的另一个js文件:
#= require doc_ready
为什么视图是由控制器而不是静态资源渲染的?
因为我想通过绝对url引用文件,所以这不会改变。Rails 4.0只编译具有摘要的资产,如embed-dc589fbef3832d9c38a4fbbc4b021f59.js
,我希望使用相同的url(并可能根据时间终止缓存文件),即使我对脚本进行了更改
为什么是绝对url?
因为我想在另一个网站外部使用脚本,我给该网站的站长的代码不能更改
为什么我要从资产中包含另一个js?
我可以通过制作一个控制器动作来呈现一个
.js.coffee
视图来实现这一点吗?该视图编译并包含库中其他需要的js文件,就像sprocket在编译资产时所做的那样?像这样使用重定向:
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
我设法找到了一种方法,通过使用 控制器保持不变:
class Widgets::EmbedJsController < ActionController::Base
def embedded_script
end
end
classwidgets::EmbedJsController
在coffeescript视图中,我“需要”了另一个文件,如下所示:
`<%= raw Rails.application.assets['doc_ready'].body %>`
``
似乎在本地工作,我将很快在生产中测试
这也可以通过直接从控制器提供
Rails.application.assets['widgets/embed'].body
来重构,控制器应该编译coffeescript,但还没有测试它 另一种方法是将资产的摘要版本符号链接或复制到某个固定路径(并将其提供给第三方)。这样做的好处是请求根本不应该碰到rails(因为这些请求应该由web服务器直接提供)
实现自动化相对简单——我知道有两个库可以实现这一点
- (这是我写的)