Rendering unique cached page per user in Fragment Caching


#1

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.

http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html

Thanks.

Regards,
Ankur


#2

On 23 December 2014 at 13:42, Ankur K. removed_email_address@domain.invalid
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


#3

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


#4

On 30 December 2014 at 13:33, Ankur K. removed_email_address@domain.invalid
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