为什么Rails在使用yield时会重复资产



我已经阅读并尝试了这里针对Rails中重复资产问题的解决方案(Ruby On Rails 3.1-资产管道-资产渲染两次),但它不适用于我的场景,它看起来像这样:

布局:

<!DOCTYPE html>
<html>
<head>...</head>
<body>
...
<!-- including :application -->
<%= javascript_include_tag :application %>
<!-- yielding :body_script -->
<%=  yield :body_script %>
</body>
</html>

然后,在"用户"视图中:

<%= content_for :body_script do %>
    <%= javascript_include_tag 'users' %>
<% end %>
...
...
...

我的javascript依赖项是:

  • application.js"需要"jquery、bootstrap和self
  • users.js"需要"worker_interface.js
  • worker_interface.js"需要"jquery、knocket和应用程序

当呈现"users"视图时,我的身体末端会出现重复的jquery和application.js,其中一个是因为javascript_include_tag :application而呈现的,另一个是由于yield :body_script而渲染的,如下所示:

<!-- including :application -->
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<!-- yielding :body_script -->
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/knockout.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<script src="/assets/worker_interface.js?body=1" type="text/javascript"></script>
<script src="/assets/users.js?body=1" type="text/javascript"></script>

我知道这里有多余的依赖项,因为我不止一次(间接地)要求包含jquery和应用程序。但是,难道Rails不应该保证不呈现重复的文件吗我是否仍然可以保留"冗余"依赖项,并且只渲染一次文件

顺便说一句,我使用的是Rails版本3.2.9。

Rails不应该保证不呈现重复的文件吗?我可以吗仍然保留"冗余"依赖项并渲染文件只有一次?

简单的答案:没有

资产是预先编译的,因此在生产中是"静态的"。您可以通过多种方式包含资产。因此rails无法"知道"在渲染页面的上下文中应该删除哪些文件。

你需要确保没有重复。

最新更新