Rendering unique cached page per user in Fragment Caching

6 views
Skip to first unread message

Ankur Kumar

unread,
Dec 23, 2014, 8:43:34 AM12/23/14
to rubyonra...@googlegroups.com

Hi,

My app has devise authentication for every user. I integrated fragment caching for one of my views which is accessible only on sign-in. 

The cached page saved by one user is accessible by another user. How can I implement a unique key based caching so that cached pages are unique for every user?

I read about some caching methods below but not sure how to create/retrieve a unique cached page.


Thanks.
--
Regards,
Ankur 

Colin Law

unread,
Dec 23, 2014, 8:49:54 AM12/23/14
to rubyonra...@googlegroups.com
On 23 December 2014 at 13:42, Ankur Kumar <specia...@gmail.com> wrote:
>
> Hi,
>
> My app has devise authentication for every user. I integrated fragment
> caching for one of my views which is accessible only on sign-in.
>
> The cached page saved by one user is accessible by another user. How can I
> implement a unique key based caching so that cached pages are unique for
> every user?

Include the user id in the key string.

Colin

Ankur Kumar

unread,
Dec 30, 2014, 8:34:35 AM12/30/14
to rubyonra...@googlegroups.com

Thanks Colin for your reply. Can you please let me know how can user_id be included in caching key string? I have following implementation of caching as of now.

app/views/employee/index.html.erb

<% cache "employee_list "do %>
  List of all employees:
  <% Employee.all.each do |e| %>
    <%= link_to e.name, employee_url(e) %>
  <% end %>
<% end %>

app/sweepers/employee_sweeper.rb

class EmployeeSweeper < ActionController::Caching::Sweeper
  observe Employee
  def sweep(employee)
   expire_fragment("employee_list")
 end
alias_method :after_create, :sweep
  alias_method :after_update, :sweep
  alias_method :after_destroy,:sweep
end

Devise "current_user" is accessible in all the above files.

--
Regards,
Ankur

Colin

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/CAL%3D0gLvnok5OsKHzcD2go8FhDtp7wpzLR%3DUiRj-V1P9nHdKTwA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Colin Law

unread,
Dec 30, 2014, 10:33:49 AM12/30/14
to rubyonra...@googlegroups.com
On 30 December 2014 at 13:33, Ankur Kumar <specia...@gmail.com> wrote:
>
> Thanks Colin for your reply. Can you please let me know how can user_id be
> included in caching key string? I have following implementation of caching
> as of now.
>
> app/views/employee/index.html.erb
>
> <% cache "employee_list "do %>

Something like
cache "employee_list #{current_user.id}" do
so the user id is included in cache key. Similarly for expire.

Colin
Reply all
Reply to author
Forward
0 new messages