diff options
-rw-r--r-- | actionpack/lib/action_controller/session/active_record_store.rb | 5 | ||||
-rwxr-xr-x | activerecord/lib/active_record/base.rb | 16 |
2 files changed, 20 insertions, 1 deletions
diff --git a/actionpack/lib/action_controller/session/active_record_store.rb b/actionpack/lib/action_controller/session/active_record_store.rb index 90d9f3fbe1..36896d36d8 100644 --- a/actionpack/lib/action_controller/session/active_record_store.rb +++ b/actionpack/lib/action_controller/session/active_record_store.rb @@ -46,6 +46,11 @@ class CGI class << self + # Don't try to reload ARStore::Session in dev mode. + def reloadable? #:nodoc: + false + end + def data_column_size_limit connection.columns(table_name).find {|column| column.name == 'data'}.limit end diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index b5d2129fba..48d9c6ae12 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -256,13 +256,27 @@ module ActiveRecord #:nodoc: @@subclasses[self] << child super end + + # Allow all subclasses of AR::Base to be reloaded in dev mode, unless they + # explicitly decline the honor. USE WITH CAUTION. Only AR subclasses kept + # in the framework should use the flag, so #reset_subclasses and so forth + # leave it alone. + def self.reloadable? #:nodoc: + true + end def self.reset_subclasses + nonreloadables = [] subclasses.each do |klass| + unless klass.reloadable? + nonreloadables << klass + next + end klass.instance_variables.each { |var| klass.send(:remove_instance_variable, var) } klass.instance_methods(false).each { |m| klass.send :undef_method, m } end - @@subclasses.clear + @@subclasses = {} + nonreloadables.each { |klass| (@@subclasses[klass.superclass] ||= []) << klass } end @@subclasses = {} |