Many of you probably know the ''depot'' app from the
''Agile Rails
development'' book.
When the view changes from ''Store'' to
''display_cart,'' a session
containing the shopping-cart (:cart) is supposed maintain the
''cart''
between calls, but when the display_cart stub view shows up, I have
always ZERO elements in the cart!
I have received valuable help already, but the issue seems less
understandable than I thought at first. Here''s a resumen:
I have constructed the ''products'' model, the Store-controller,
and the
''Cart'' and ''Line Item'' classes. I have told
Application-controller
about
:cart and :line_item:
model :cart
model :line_item
Here''s part of the Store_controller:
def add_to_cart
product = Product.find(params[:id])
@cart = find_cart
@cart.add_product(product)
#1# breakpoint "hallo"
redirect_to(:action => ''display_cart'')
end
def display_cart
@cart = find_cart
@items = @cart.items
end
private
def find_cart
session[:cart] ||= Cart.new
end
#1# At this breakpoint I can verify that the cart contains the correct
product, and the session is ok.
Then the view changes to the test-stub ''display_cart,'' which
looks like
this:
<h1>Display Cart</h1>
<p>
Your cart contains <%= @items.size %> items.
</p>
Every time, no matter how many times I back up and add products, the
@items.size evaluates to ZERO. So the session and the cart get lost.
Both my browsers have cookies enabled, but in the
cookie-list, I can''t find any cookie which associates to this
application (under WEBrick).
Any suggestions?
(New msg:)
I did some more breakpointing in the ''display_cart''
method:
def display_cart
# 1 # breakpoint "hello"
@cart = find_cart
@items = @cart.items
# 2 # breakpoint "hello"
end
At the second #2# breakpoint, there was an empty session, but that was
of course created by the ''find_cart'' call. At the first #1#
breakpoint,
the session was in fact nil.
When I set <%=session.session_id%> in the views, it is always exactly
the same in the ''store'' view, (but changes every time in the
''display_cart'' view).
And the _session_id COOKIE never appears in Firefox
cookie-list.>From this, it seems the server (WEBrick) doesn''t send the session
cookie to the browser.
(New msg:)
Yeah, now I use ''Live HTTP Headers,'' and it shows that WEBrick
never
sends the cookie to Firefox from my application.
All other web-sites send cookies to their heart''s delight, I can see
that directly in the ''Headers'' window.
(New msg:)
This is getting stranger all the time.....
I''ve switched to Apache (v. 1.33....). It''s s-l-o-w,
extremely slow,
but the pages keep popping up correctly.
But the cart still always contains ZERO items!
In the Store-view,(where I peek with <%=session.session_id%>), the
_session_id is always the same, and in the ''Live HTTP
Headers'' window,
there is also a _session_id from ''add_to_cart'' which is the
same at
every access to the page, BUT THE TWO are DIFFERENT. Rephrasing it more
clearly:
Every time I go back to the ''Store-view," I can see that the
session-id
is the same at every page access (peeking with <%=session.session_id%>),
but in the browser''s ''Live HTTP Headers'' window, the
_session-id is a
different one, but always the same at recurring sendings to the browser.
The session-id ought to be the same, doesn''t it?
Do you understand anything? I''ve been stuck here for nearly 2 weeks
now.
(Thanks to Christian Klauser for great help in circling in the bug)
Reagards, Audun.
--
Posted via http://www.ruby-forum.com/.