私のアプリ(Rails 4)ではユーザーが投稿に投票することができます。投稿をキャッシュすることは可能ですが、投票キャッシュをカスタマイズしてcurrent_userにパーソナライズされたものを表示することはできますか?たとえば、ユーザーが投票したかどうか。Rails 4でパーソナライズされたフラグメントをキャッシュするにはどうすればよいですか?
私はむしろこれを達成するためにhtml構造を変更しません。
オプション1:投票
これは、最も簡単な解決策と私は個人的に推奨しています一つですをキャッシュしません
# posts/_post.html.slim
- cache post do
h1 = post.title
= post.text
= render 'votes/form', post: post
# votes/_form.html.slim
- if signed_in? && current_user.voted?(post)
= form_for current_user.votes.find_by(post: post), method: :delete do |f|
= f.submit
- else
= form_for Vote.new do |f|
= f.submit
ありがとうございます。 IDを受け取るように投票を変更すると、追加のクエリを実行できなくなります。それはすでにインスタンス変数として利用可能ではありませんか?あなたが必要とする唯一のクエリーは 'votes.where user_id = foo and post_id = foo'です。 – dee
はい、javascriptソリューションでは '$ .getScript'がajaxリクエストをトリガーし、dbクエリを通じて' @ post'インスタンス変数を設定します。あなたが '@ post_id'を持つことができれば、このシナリオではこれがより速くなります。 – jokklan
ありがとうございます。 1つの最後のコメント。あなたの最初の解決策は '= render @ posts'のようにコレクションをレンダリングできないことを意味します。なぜなら、投票のレンダリングは' _post'部分から起こり、キャッシュされるからです。コレクションをループして、各投稿を個別にキャッシュしてレンダリングし、キャッシュブロックの外側で '_vote'部分をレンダリングする必要があります。右? – dee