Rails 在 html public 个文件中包含 js

Rails include js in html public files

我有一些 html 个页面,其中每个页面都包含一些 javascripts 文件。我必须将这些文件放在哪里?

folder/
  page1/
    index.html
    script1.js
  page2/
    index.html
    script2.js

Updated

我解释得更好。我有一些由 html 页面和一些 javascripts 文件组成的小项目,我在其中使用 canvas。每个页面都有不同的脚本。

/sketches
  /project1
     index.html
     script1.js
     sketch.js
  /project2
     index.html
     sketch.js

名为'sketch'的文件在它们之间是不同的。 我 tought 制作一个带有参数 id 的控制器,并基于此我将加载一个不同的项目。我做到了,将 html 页面放入 public 文件夹中并且它起作用了,但是我遇到了 javascript 问题,被拒绝了。

因此,对于您所说的,我必须将所有 javascript 放在一个单独的文件夹中...我想保留该结构。 rails 中是否无法将包含所有项目的文件夹作为静态文件夹提供服务?

您必须将所有 js 文件放在 app/assets/javascripts 文件夹下。

Updated Answer

每次都加载 application.js 中的主 JavaScript。现在为不同的需要创建文件。创建一个 form.js 文件,一个 myfancypart.js 文件等。不要在 application.html.erb 布局中加载它们。在需要时动态加载它们:

application.html.erb:

<%= javascript_include_tag "application" %>
<%= yield :javascript_includes %>

你的 view.html.erb 或 users/new.html.erb:

<% content_for :javascript_includes do %>
  <%= javascript_include_tag "users_new.js" %>
<% end %>

content_for 块中的所有内容都将在屈服时加载:javascript_includes。

来源:Whosebug

你应该这样关注:

folder/
  pages/
    index.html
    aboutus.html
  assets/
    js/
      some_js.js
      anoter_js.js
    css/
      homepage.css
      about.css

最佳做法是将所有第三方资产放在 vendor/assets 文件夹中,将您的应用特定资产放在 app/assets 文件夹中。并且您应该 require 其特定清单文件中的资产。
如果您的 vendor/assets/javascripts 文件夹中有一些这样的 js 文件,

`/vendor/
     /assets/
          /javascripts/`
               script1.js
               script2.js

然后在你的 app/assets/javascripts/application.js 中添加

  //= require script1
  //= require script2

在 rails 5.1+ 中,assets 目录已从 vendor 中删除,因此您应该创建自己的目录并将其添加到 config/initializers/assets.rb 进行预编译或使用相对路径关于供应商目录的文件。

/sketches
  sketch.js
  /project1
     index.html <-- include relative path for sketch.js
     script1.js
  /project2
     index.html <-- include relative path for sketch.js

我认为你可以只包含父文件夹中的相对路径 js 文件,这样你就不需要放入每个子文件夹。