Rails 从 4.2.0 升级到 5.1.2 导致以下 coffeescript 代码中断

Rails upgrade from 4.2.0 to 5.1.2 causes the following coffeescript code to break

所以附件视图 运行 中显示的 coffeescript 代码在我的 Rails 4.2.0 视图中没有问题,但在 Rails 5.1.2 升级中中断了显示的消息:我已经升级了如下所示的宝石:

coffee-rails from 4.1.0 to 4.2.2
coffee-script-source from 1.9.0 to 1.12.2

并且 haml_coffee_assets 始终指向 master 分支,如下所示,因此那里没有变化:

gem 'haml_coffee_assets', git: "https://github.com/netzpirat/haml_coffee_assets"

在我开始做出疯狂的改变之前,我想看看是否还有其他人 运行 遇到过类似的问题。在我较新的 Rails 应用程序中,我正在远离 coffeescript,转而使用普通 javascript,并且嵌入式 javascript 代码没有问题。然而,这是一个没有被大量使用的旧应用程序,我想投入最少的时间来维护它。里面有太多的 Coffeescript 代码,我无法轻松地转换它。如果有一个网站可以让我将 coffeescript 转换为 Javascript 而不会出现太多问题,那么我愿意。最好的解决办法就是继续我所拥有的。

有人 运行 遇到过这个问题吗?有什么想法吗?

代码如下:

- if @well.has_sense_graph?
  #sensitivity.tab
    = render :partial => "shared_wells/show_sensitivity", :locals => {:sensitivity => sense_hash[:sensitivity], :offset => sense_hash[:offset] }
    %br
    #discount_chart

:coffeescript
  $ ->
    model = new Backbone.Model
      forecastTickInterval: #{graph_hash[:forecast_tick_interval]}
      typeWell: #{@well.to_json}
      x_labels: #{graph_hash[:price_array]}
      disc_rate_array: #{graph_hash[:disc_rate_array]}
      disc_pv10_array: #{graph_hash[:disc_pv10_array]}
      ngl_array: #{ngl_vol_array}
    view = new VGStream.Views.TypeWells.Show(
      model: model
    ).render()
    VGStream.App.router = new VGStream.Routers.Tabs()
    VGStream.App.currentView = view
    Backbone.history.start()
    _.defer ->
      $(document).scrollTop(0)

所以我用实际的方法解决了这个问题。鉴于我必须摆脱应用程序中的 CoffeeScript 代码并将其替换为等效的 Javascript 代码的目标,我执行了以下操作:

我在 haml 页面中嵌入了 CoffeeScript 代码的所有页面,如上所示,在我提供的代码中,我将其替换为等效的 Javascript 代码,如下所示:

:javascript

   $(function() {
     ...
   });

请注意,我留下了 'pure' coffeescript 文件,即扩展名“.coffee”单独存储在 assets/javascript/... 文件夹中,因为我更直接的目标是获得Rails 5.1.2 升级尽快完成。

出于某种我不知道(我也不想知道)的原因,嵌入式 coffeescript 代码不再像在 Rails 4.2.0 版本中那样对我有效。但是由于我不再关心 CoffeeScript,所以这种混合解决方案对我来说是可以接受的。