Ruby on rails Rails 5应用程序赢得';t从assets/javascripts文件夹加载JS

Ruby on rails Rails 5应用程序赢得';t从assets/javascripts文件夹加载JS,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,据我所知,如果application.js文件中存在/=require\u tree,则会加载assets/javascripts文件夹中的任何js文件。然而,我无法让我的JS代码正常工作。我把它放在assets/javascripts/locations.js中,但它不起作用。当我把它放在application.html.erb文件中的script标记中时,另一方面它工作得非常好。你知道我会错过什么吗?运行轨道5.2。下面是JS代码 locations.js var locations = [

据我所知,如果application.js文件中存在
/=require\u tree
,则会加载assets/javascripts文件夹中的任何js文件。然而,我无法让我的JS代码正常工作。我把它放在
assets/javascripts/locations.js中,但它不起作用。当我把它放在
application.html.erb
文件中的
script
标记中时,另一方面它工作得非常好。你知道我会错过什么吗?运行轨道5.2。下面是JS代码

locations.js

var locations = ["coordinatesStore"]
  .map(id => document.getElementById(id));

Array.prototype.forEach.call(
  document.querySelectorAll('.add-button'),
  (button, i) => {
    button.addEventListener('click', () => getLocation(i));
  }
);

function getLocation(i) {
  var location = locations[i];
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(({ coords: { latitude, longitude }}) => {
      location.value = latitude + ", " + longitude;
    });
  } else { 
    location.value = "Geolocation is not supported by this browser.";
  }
}
我在application.html.erb中有此标记

<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

在哪里
在application.html.erb中


尝试将其放在body标记的末尾,至少放在

之后。为什么默认情况下,标记位于erb文件的
head
部分?因为默认情况下,按照惯例,包含外部.js文件的标记属于该部分。但是“最近”(某种程度上),最好的方法是在HTML之后包含它,这样就不会通过加载外部的.js文件来阻止页面的呈现。在您的情况下,由于代码在导入后立即执行,因此javascript在页面中没有任何HTML之前就已经运行,因此无法工作!那么默认设置会导致每个使用Rails的人都出现同样的问题吗?