Permalink
Browse files

Fixed that a SessionRestoreError was thrown if a model object was pla…

…ced in the session that wasn't available to all controllers

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1725 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent ac38081 commit 8dbaae6012c8aa71c811eb42e7a7ac32a36e2080 @dhh dhh committed Jul 6, 2005
Showing with 17 additions and 7 deletions.
  1. +17 −7 actionpack/lib/action_controller/cgi_process.rb
@@ -89,18 +89,28 @@ def host
def session
return @session unless @session.nil?
+
begin
@session = (@session_options == false ? {} : CGI::Session.new(@cgi, session_options_with_string_keys))
@session["__valid_session"]
return @session
rescue ArgumentError => e
- @session.delete if @session
- raise(
- ActionController::SessionRestoreError,
- "Session contained objects where the class definition wasn't available. " +
- "Remember to require classes for all objects kept in the session. " +
- "The session has been deleted. (Original exception: #{e.message} [#{e.class}])"
- )
+ if e.message =~ %r{undefined class/module (\w+)}
+ begin
+ Module.const_missing($1)
+ rescue LoadError, NameError => e
+ raise(
+ ActionController::SessionRestoreError,
+ "Session contained objects where the class definition wasn't available. " +
+ "Remember to require classes for all objects kept in the session. " +
+ "(Original exception: #{e.message} [#{e.class}])"
+ )
+ end
+
+ retry
+ else
+ raise
+ end
end
end

0 comments on commit 8dbaae6

Please sign in to comment.