Cocoon (Ruby Gem) 未在生产中运行

Cocoon (Ruby Gem) not working in production

我目前正在 Rails 上使用 Ruby 开发一个应用程序,并且正在尝试使用 cocoon gem 实现嵌套属性:根据我当前的配置,它可以在我的本地机器上运行,但不是在我的服务器上生产。我知道为什么它不起作用,但不知道如何解决它。

首先,这是我的包含 cocoon 的清单:

application.js    

...
//= require cocoon
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require turbolinks
//= require chartkick
//= require_tree .

我在这里看到问题:Cocoon 在 jquery 和 jquery_ujs 之前,因此我在开发者工具的控制台中收到以下错误:

Uncaught ReferenceError: jQuery is not defined at cocoon.self-6874ad698cefd21cc1119b773550f61b5c1a60396460f015222af59293affe80.js?body=1:131

即使出现错误,嵌套属性在本地仍然有效。另一方面,在生产中,添加关联的按钮 (link_to_add_association) 不再起作用(它可以点击,但什么都不做,甚至不会抛出错误)。当然 我也尝试重新排列清单并将 jquery 和 jquery_ujs 放在 cocoon 之前:但是 cocoon 不再正常工作了:而不是插入一个元素link_to_add_association,茧插二.

这是我的头像 application.html:

application.html.erb

..
  <%= csrf_meta_tags %>
  <%= javascript_include_tag 'https://www.gstatic.com/charts/loader.js' %>
  <%= javascript_include_tag 'application', 'chartkick' %>
  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
..

这是我的 Gemfile 的相关部分(ruby 2.3.1p112 安装在生产服务器上):

Gemfile

..
gem 'rails', '5.0.2'
gem 'jquery-rails', '4.2.2'

..
# Used for the dynamic forms:
gem 'simple_form', '3.4.0'
gem 'cocoon', '1.2.9'

..

我不知道为什么 cocoon 插入条目两次或者为什么应用程序在生产环境中不起作用。有谁知道我该如何解决这个问题?

只引用一次chartkick

从布局中删除行 <%= javascript_include_tag 'application', 'chartkick' %>

你包含了两次application.js,这意味着茧javascript也被包含了两次,所以茧会有两个click-handlers:

<%= javascript_include_tag 'application', 'chartkick' %>
<%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

恕我直言,您应该只删除第一行。