# Quick questions on extensions/overrides

**URL:** <https://www.ruby-forum.com/t/quick-questions-on-extensions-overrides/174198>\
**Category:** Rails\
**Created:** [August 22, 2009, 8:38am UTC](https://www.ruby-forum.com/t/quick-questions-on-extensions-overrides/174198 "2009-08-22T08:38:52Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![BallaBall](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/dbc845/32.png) [@BallaBall](https://www.ruby-forum.com/u/BallaBall)\
**Post date:** [August 22, 2009, 8:38am UTC](https://www.ruby-forum.com/t/quick-questions-on-extensions-overrides/174198/1 "2009-08-22T08:38:52Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![BallaBall](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/dbc845/32.png) [@BallaBall](https://www.ruby-forum.com/u/BallaBall)\
**Post date:** [August 22, 2009, 3:59pm UTC](https://www.ruby-forum.com/t/quick-questions-on-extensions-overrides/174198/2 "2009-08-22T15:59:34Z")

</div>

Quoting BallaBall [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> 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

---

<div class="post-metadata">

**Author:** ![BallaBall](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/dbc845/32.png) [@BallaBall](https://www.ruby-forum.com/u/BallaBall)\
**Post date:** [August 22, 2009, 11:24pm UTC](https://www.ruby-forum.com/t/quick-questions-on-extensions-overrides/174198/3 "2009-08-22T23:24:27Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![BallaBall](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/dbc845/32.png) [@BallaBall](https://www.ruby-forum.com/u/BallaBall)\
**Post date:** [August 24, 2009, 1:36am UTC](https://www.ruby-forum.com/t/quick-questions-on-extensions-overrides/174198/4 "2009-08-24T01:36:35Z")

</div>

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

Quoting Jeffrey L. Taylor [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![BallaBall](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/dbc845/32.png) [@BallaBall](https://www.ruby-forum.com/u/BallaBall)\
**Post date:** [August 24, 2009, 6:31pm UTC](https://www.ruby-forum.com/t/quick-questions-on-extensions-overrides/174198/5 "2009-08-24T18:31:43Z")

</div>

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 ?

---

<div class="post-metadata">

**Author:** ![BallaBall](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/dbc845/32.png) [@BallaBall](https://www.ruby-forum.com/u/BallaBall)\
**Post date:** [August 24, 2009, 7:00pm UTC](https://www.ruby-forum.com/t/quick-questions-on-extensions-overrides/174198/6 "2009-08-24T19:00:24Z")

</div>

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.

- 

Maurício Linhares  
[http://codeshooter.wordpress.com/](http://codeshooter.wordpress.com/) | [http://twitter.com/mauriciojr](http://twitter.com/mauriciojr)

---

<div class="post-metadata">

**Author:** ![BallaBall](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/dbc845/32.png) [@BallaBall](https://www.ruby-forum.com/u/BallaBall)\
**Post date:** [August 23, 2009, 3:20am UTC](https://www.ruby-forum.com/t/quick-questions-on-extensions-overrides/174198/7 "2009-08-23T03:20:58Z")

</div>

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 [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
