Hi
I''m trying to find a solution to what I would describe as
inconsistent state of session objects updated from multiple pages
using Ajax techniques.
A concrete example would help.
The ''Agile Web Development with Rails'' book includes the
development
of a sample application called the Depot application. Its a shopping
application - where the user shops for books, places them in a
''cart'',
and ultimately ''checks out''.
The Depot application has a page where you can see all the available
books - along the left-nav there''s also a summary of the users
''cart''. Every time a user adds a book to their cart - the
left-nav
summary is updated accordingly. In addition - assume there''s a link
on this page - let''s call it the ''shopping'' page,
that allows a user
to go to another page and edit the contents of their cart - let''s call
that page the ''edit cart'' page.
Imagine a user has added 4 books on the ''shopping'' page, then
they go
to the ''edit cart'' page and delete all the items from their
cart -
books are removed from the ''cart object'' every time the user
deletes a
book from their cart. The cart object is stored in the session. They
then hit the browser''s ''back'' button - taking them
back to the
''shopping'' page - which shows the cart containing 4 books in
the left-
nav summary - the same books that were in the cart when the user
initially left the ''shopping'' page. If the user refreshes the
''shopping'' page - the cart is now empty, correctly reflecting
the
contents of the cart.
I found what appears to be a solution that works ''sometimes''.
I
don''t mean to be imprecise - but it literally works sometimes in
production mode and sometimes not. I have no idea why.
The fix can be explained here ...
http://giantrobots.thoughtbot.com/2008/4/25/pitfalls-in-restful-wizards
and amounts to adding a ''filter'' which calls a private
''no_cache''
method defined in application.rb ...
def no_cache
response.headers["Last-Modified"] = Time.now.httpdate
response.headers["Expires"] = 0
# HTTP 1.0
response.headers["Pragma"] = "no-cache"
# HTTP 1.1 ''pre-check=0, post-check=0'' (IE specific)
response.headers["Cache-Control"] = ''no-store, no-cache,
must-
revalidate, max-age=0, pre-check=0, post-check=0''
end
I then added the following line to the controller/actions that I want
to not be cached ...
after_filter :no_cache, :only => [:index]
Note: the link I included above uses a ''before'' filter, and
in my
testing that didn''t seem to work - but an ''after''
filter did.
Now - like I said above, it works sometimes, other times not. So my
question - does anyone know why ?
Additionally - is there a reliable browser agnostic fix that can
address the underlying issue - specifically, force pages that users
return to when hitting the browse button to not be cached and actually
request the page from the server?
Any help would be greatly appreciated. Thanks for making it this far
and sorry for the length of the post.
Dave
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---