La mia app (Rails 4) consente agli utenti di votare sui post. È possibile memorizzare nella cache il post, ma personalizzare la cache dei voti in modo che mostri uno personalizzato per current_user? Ad esempio, se l'utente ha votato o meno.Come posso memorizzare in cache un frammento personalizzato in Rails 4?
Preferirei non modificare la struttura html per ottenere ciò.
# 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
Grazie. In che modo la modifica votata per ricevere un ID impedisce di eseguire una query aggiuntiva? Non è già disponibile come variabile di istanza? L'unica query di cui hai bisogno è 'votes.where user_id = foo e post_id = foo'. – dee
Sì, ma con la soluzione javascript '$ .getScript' attiva una richiesta ajax che quindi imposterà la variabile istanza' @ post' tramite una query db. Se potessi avere un '@ post_id' sarebbe più veloce, il che è importante in questo scenario. – jokklan
Grazie. Un ultimo commento. La tua prima soluzione significa che non posso eseguire il rendering di una raccolta, come in '= render @ posts' perché il rendering avverrà all'interno del partial' _post', e verrà memorizzato nella cache. Avrei bisogno di ricorrere alla raccolta, alla cache e al rendering di ogni singolo post, quindi all'esterno del blocco della cache renderò il partial '_vote'. Destra? – dee