終わり!
したがって、同じことをしたい人のために、ここでそれを行う方法の簡単な概要を示します. 独自のソリューションに合わせて、このソリューションを変更または微調整する必要がある場合があります。
これは、キャッシュ キーを使用している場合にのみ機能します。私の場合、2つのタイプがあります。contact.hash_key
と_message.hash_key
すべてのメッセージ キャッシュは、親連絡先キャッシュ内に保持されます。したがって、本質的に:
<div id='contact-hash'>
<div id='message-hash-1'>
<div id='message-hash-2'>
<div id='message-hash-3'>
まず、メッセージをループして、キャッシュされているかどうかを確認する必要があります。そうであれば、キャッシュされたコピーをレンダリングするだけです。Rails.cache.read
次のメソッドを使用してこれを行うことができます。
messages.each do |message|
cache = Rails.cache.read 'views/'+message.hash_key
if cache.nil? == false
%><%= cache.html_safe %><%
end
end
これで、すでにロードされているキャッシュからのメッセージのリストができました。では、新しいメッセージはどうでしょうか。これらを ajax 経由でロードして、ユーザーが退屈なページのロードを待たないようにします。
"/messages?cid=<%=@contact.hash_key%>"
上記の質問で、AJAX 呼び出しでクエリを実行していることに気付くでしょう。これは を呼び出してmessages controller
をレンダリングしていindex view
ます。
レンダリングされたビューを DOM にロードする前に、最初にそれをキャッシュに書き込みます。驚いたことに、それを読み取るために使用するのと同じ message.hash_key を使用します。
だからあなたの見解では:
<%
cache(message[:hash_key]) do
%>
<div class='message'>
This is a new message from the server.
</div>
<%
end
%>
いくつかの状況でこれが機能しない場合 (アプリの順列が非常に多いことは神が知っています) Rails.cache.write 'foo', 'bar'
、ビュー レベルでキャッシュする代わりにコントローラーで使用することもできます。
そして、あなたはそれを持っています。これで、新しい hash_key をリストに追加し、ビューを AJAX 呼び出しの結果として DOM にレンダリングすることができます。
リスト内の新しい hash_key を使用してループすると、キャッシュされたコピーとして表示されます。
これは、最も洗練されたソリューションである場合とそうでない場合があります。誰かが単純化したり、アドバイスをしたりして改善できるようにしたい場合は、大歓迎です。