Quick questions on extensions/overrides

Say I want to extend/override a method on something like ActionController.

Where should I put this "monkeypatch"? Currently I am putting it in config/initializers but Im thinking there is a better place.

Thanks

Quoting BallaBall <balla@sogetthis.com>:

Say I want to extend/override a method on something like ActionController.

Where should I put this "monkeypatch"? Currently I am putting it in config/initializers but Im thinking there is a better place.

app/controllers/application_controller.rb

It inherits from ActionController::Base and all other controllers inherit from it.

HTH,   Jeffrey

Thanks Jeffrey but I am aware of this. Like you said it inherits from ActionController::Base but where should this file be kept?

For example if I reopen the class like:

module ActionController   class Base      def override_some_method      end   end end

Where should the above code live? Like I said in my first post is that I would create a file name action_controller_overrides.rb and place that in config/initializers but I am unsure if that is the best place to put it.

Why not put it in app/controllers/application_controller.rb? Are you trying to override the method for all Rails applications? Unless I do not understand what you are trying to do, I see no reason to not put it in application_controller.rb. This is exactly what this class is for - methods common to all controllers.

Jeffrey

Quoting BallaBall <balla@sogetthis.com>:

Short write up at: http://www.therailsway.com/2009/4/6/controller-inheritance

Quoting Jeffrey L. Taylor <ror@abluz.dyndns.org>:

I meant this in a more general way. Where should I put overrides. The example I listed for ApplicationController was just an example.

As another example say I want to override something in Memcache.

class Memcache # Overrides go here end

Where would that go. Should it go in something like app/lib/, config/ initializers, config/overrides ?

You should never re-open a class like this, always use class_eval and instance_eval:

Memcache.class_eval do

  def your_instance_method_here   end

  def self.your_class_method_here   end

end

Using class_eval instead of "re-defining" a class as you did will require the class to be loaded BEFORE your code is run, which is usually what you're looking for.