update the partial in your controller method which destroys the session:
def logout session = nil
render :update do |page| page.replace_html 'my_div', :partial => 'topnav' end end
Mike
update the partial in your controller method which destroys the session:
def logout session = nil
render :update do |page| page.replace_html 'my_div', :partial => 'topnav' end end
Mike
Mike Garey wrote:
update the partial in your controller method which destroys the session:
def logout session = nil
render :update do |page| page.replace_html 'my_div', :partial => 'topnav' end end
Mike
Mike,
excellent, thanks for the help. i have to review the page object.
best,
tim
I am almost there, the problem is that topnav is a partial included in views\layouts\application.html.erb (i.e. layouts\_topnav). I have tried all sorts of ways to get the partial to look at layouts\_topnav.html.erb (things like :partial => '\layouts\_topnav'). this might be working, but then i get a 'you have rendered twice' error.
any help greatly appreciated.
best,
tim
Mike Garey wrote:
this is almost working:
def logout session[:user_id] = nil render :update do |page| page.replace_html 'header', :partial => '/layouts/nav' end flash[:notice] = "Logged out" redirect_to(:action => "login") end
but i get an error:
ActionController::DoubleRenderError in LoginController#logout
Can only render or redirect once per action
any thoughts on why this is?
best
tim
Tim Booher wrote:
Well it's exactly what it says, you can't render something and redirect in the same action. Or to put things another way, if you redirect (ie send back a 302 response) the browser is just going to follow it, it doesn't make sense to also render: the body of the http response is ignored. Even if you could it wouldn't make any difference: you're generating some javascript to change the page, but that page is being thrown away since the browser is being redirected to a new location.
You shouldn't need to be doing anything much beyond what you put in your first post, there's probably something silly tripping you up. Messing around with ajax is almost certainly not what you need to do.
Fred
Fred,
Great point and it's well understood. My problem was that I was not adequately destroying the session, nor testing for the session's existence correctly. I built the helper method logged_in? which works fine inside the partial.
best,
tim
also, you should probably place your topnav partial into views/shared. That's where views that are to be shared between different actions should be stored. Topnav isn't a layout, so it doesn't really belong in the views/layouts dir.
Mike
How are you resetting your session? For example, session = nil as seen above doesn't do much (it just creates a local variable called session and sets it to nil). If you want to clear out the whole session use reset_session. Just session[:foo]=nil will also work if you just want to clear that bit of it.
Fred
Fred,
great point. i am now using reset_session.
regards,
tim
Frederick Cheung wrote: