aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
Diffstat (limited to 'railties')
-rw-r--r--railties/CHANGELOG19
-rw-r--r--railties/lib/dispatcher.rb28
2 files changed, 38 insertions, 9 deletions
diff --git a/railties/CHANGELOG b/railties/CHANGELOG
index d6cf19ebf5..dc6356056d 100644
--- a/railties/CHANGELOG
+++ b/railties/CHANGELOG
@@ -1,5 +1,24 @@
*SVN*
+* Fixed superclass mismatch and other controller related problems by not using dependency reloading for controllers. This means that controller
+ hierarchies need to explicitly require the superclass if its not ApplicationController. Example:
+
+ # application.rb
+ class ApplicationController < ActionController::Base
+ end
+
+ # base.rb
+ class BaseController < ApplicationController
+ end
+
+ # media_controller.rb
+ require_or_load 'base'
+ class MediaController < BaseController
+ end
+
+
+* Fixed handling of syntax errors in models that had already been succesfully required once in the current interpreter
+
* Fixed that models that weren't referenced in associations weren't being reloaded in the development mode by reinstating the reload
* Fixed that generate scaffold would produce bad functional tests
diff --git a/railties/lib/dispatcher.rb b/railties/lib/dispatcher.rb
index 56d9199d20..1b53d24a86 100644
--- a/railties/lib/dispatcher.rb
+++ b/railties/lib/dispatcher.rb
@@ -34,29 +34,39 @@ class Dispatcher
controller_name, module_name = controller_name(request.parameters), module_name(request.parameters)
+ reload_models
+
require_or_load("application")
require_or_load(controller_path(controller_name, module_name))
- if Dependencies.mechanism == :load
- ActiveRecord::Base.reset_column_information_and_inheritable_attributes_for_all_subclasses
- Dependencies.reload
- end
-
controller_class(controller_name).process(request, response).out
rescue Object => exception
ActionController::Base.process_with_exception(request, response, exception).out
ensure
- remove_class_hierarchy(controller_class(controller_name), ActionController::Base) if Dependencies.mechanism == :load
+ remove_controllers(controller_name)
Breakpoint.deactivate_drb if defined?(BREAKPOINT_SERVER_PORT)
end
end
private
+ def reload_models
+ if Dependencies.load?
+ ActiveRecord::Base.reset_column_information_and_inheritable_attributes_for_all_subclasses
+ Dependencies.reload
+ end
+ end
+
+ def remove_controllers(controller_name)
+ if Dependencies.load? && defined?(ApplicationController)
+ remove_class_hierarchy(controller_class(controller_name), ActionController::Base)
+ end
+ end
+
def controller_path(controller_name, module_name = nil)
if module_name
- "#{module_name}/#{Inflector.underscore(controller_name)}_controller"
+ "#{module_name}/#{controller_name.underscore}_controller"
else
- "#{Inflector.underscore(controller_name)}_controller"
+ "#{controller_name.underscore}_controller"
end
end
@@ -65,7 +75,7 @@ class Dispatcher
end
def controller_class_name(controller_name)
- "#{Inflector.camelize(controller_name)}Controller"
+ "#{controller_name.camelize}Controller"
end
def controller_name(parameters)