レール:レイアウト内の対応する「yield」の後に「content_for」を使用します

StackOverflow https://stackoverflow.com/questions/2026740

質問

以前にも質問されたと思いますが、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 の中で覆われていた。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top