0

我已经阅读并尝试了这里的解决方案(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、淘汰赛和应用程序

当“用户”视图被渲染时,我在 body 的末尾得到了重复的 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。

4

1 回答 1

2

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

简单的回答:没有

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

您需要确保没有重复。

于 2013-02-19T19:21:54.877 回答