Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从控制器渲染js时使用Rails链轮指令_Ruby On Rails_Ruby On Rails 4_Coffeescript_Asset Pipeline_Sprockets - Fatal编程技术网

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?
  • 使代码保持干燥
  • 需要一个模拟jquery就绪事件的脚本,该事件用于在包含脚本的页面上创建小部件

  • 我可以通过制作一个控制器动作来呈现一个
    .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服务器直接提供)

    实现自动化相对简单——我知道有两个库可以实现这一点

    • (这是我写的)

    重定向,AFAIK,无法与脚本标记源正常工作(这是我正在尝试做的),我更感兴趣的是以这种方式呈现资产文件(当然,没有与资产服务器建立另一个连接的开销,我想从app/assets文件夹动态编译它)好的,我做了一些搜索,显然重定向工作如预期的那样,它只是使请求变慢