我已经在这里阅读并尝试了解决方案(Ruby On Rails 3.1 - assets pipeline - assets rendered twice)以解决Rails中的重复资产问题,但它不适用于我的场景,如下所示:
布局:
<!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依赖是:
当呈现“用户”视图时,我的身体末端会出现重复的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和application。但是,不应该Rails保证不会呈现重复文件? 我是否仍然可以保留“冗余”依赖关系并仅将文件呈现一次?
BTW,我正在使用Rails版本3.2.9。
答案 0 :(得分:2)
不应该Rails保证不会呈现重复的文件?我可以吗 仍保留“冗余”依赖项并呈现文件 只有一次?
简单回答:没有
资产是预先编译的,因此在生产中是“静态的”。您可以通过多种方式包含资产。所以rails无法“知道”在渲染页面的上下文中应该删除哪些文件。
你需要确保没有重复。