0

Railsでの重複アセットの問題について、ここで解決策( Ruby On Rails 3.1-アセットパイプライン-2回レンダリングされたアセット)を読んで試しましたが、次のようなシナリオでは機能しません:

レイアウト:

<!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、ノックアウト、およびアプリケーションを「必要」とします

「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は重複ファイルがレンダリングされないことを保証するべきではありませんか?「冗長な」依存関係を維持し、ファイルを1回だけレンダリングすることはできますか?

ところで、私はRailsバージョン3.2.9を使用しています。

4

1 に答える 1

2

Railsは重複ファイルがレンダリングされないことを保証するべきではありませんか?「冗長な」依存関係を維持し、ファイルを1回だけレンダリングすることはできますか?

簡単な答え:いいえ

アセットはプリコンパイルされているため、本番環境では「静的」です。いくつかの方法でアセットを含めることができます。したがって、レールがレンダリングされたページのコンテキストでどのファイルを削除する必要があるかを「知る」方法はありません。

重複がないことを確認する必要があります。

于 2013-02-19T19:21:54.877 に答える