レール:レイアウト内の対応する「yield」の後に「content_for」を使用します
-
19-09-2019 - |
質問
以前にも質問されたと思いますが、Googleで検索しても解決策が見つかりませんでした。
これがRails 2.3.5でやろうとしていることです:
layouts/application.html.erb:
<html>
<head>
... some other stuff
<%= yield :head %>
</head>
<body>
<% content_for :head, "something that belongs in the head" %>
</body>
</html>
収量に注目してください 前に content_for。
Rails ではデフォルトで :head の内容を定義できないことはわかっています。 後 yield が使用されています - 理にかなっています。
テンプレートのレンダリングプロセスにフックしてみましたが、今のところ成功していません。
したがって、私の目標は、部分/テンプレート内で content_for を定義し、応答がブラウザーに送信される直前に「yield」を何らかの方法で遅延させて実行できるようにすることです。
誰かが解決策を思いつきましたか?
ご挨拶とありがとう、フランク
アップデートweppos のアイデアに従って、ラックミドルウェアを自分で試してみます。ありがとう
解決
レンダリング処理を最初にロードし、アクションテンプレートを実行し、その後、選択されたレイアウトでテンプレートを飾ります。
レイアウトは、このようにあなたが:head
がすでにレンダリングされた後:head
するより多くのコンテンツを追加することはできません、ボタン、トップからレンダリングされます。
あなたはあなたの戦略を変更する必要があります。いずれかの部分にフラグメントを配置し、あなたの行動ビューに添付したり、直接HTMLコードを変更するためにこのようなラックモジュール/ after_filterとして後処理戦略を使用します。
私はおそらく私が実際に必要なものに基づいて、より良い解決策を見つけることを試みるだろう。あなたはこの問題が発生した場合、チャンスはエラーはおそらくアプリケーションのアーキテクチャでは、どこか別の場所である。
他のヒント
あなたのcontent_for
文で等号があってはなりません。それはする必要があります:
<% content_for :head, "Something that belongs in the head" %>
あなたのテンプレートとパーシャル内のコンテンツを定義する場合は、それが動作するはずです。この技術は Railscastエピソード8 の中で覆われていた。