Where to I put code accessible in all model?

Even though I’ve been “playing” with RoR since before 1.0, I’ve never
got a good grasp on where you put code!

Code or helper method placed in helpers can only be called from views,
if I’m not mistaken.

Code that is specific to a model or controller is also a no-brainer -
but what about code that you want to share in different models/
controllers.

What if I have a function unformatPhone that I want to call in a
model’s before_save event - where to I stick it so that it can be
called by all models and maybe even from a view?

Is my only choice in the application_controller? Is that a good
choice?

The unformatPhone example may be trivial since it is only a regexp
replace, but what if it is something more complex. I looked around for
something that would set the case of proper names and found something
on github (GitHub - tenderlove/namecase: Properly case people's names) which is
a class. Where do I stick that?

If anyone can point me to a good tutorial on where you put code, I’d
be thankful.

AppleII717 wrote:

Even though I’ve been “playing” with RoR since before 1.0, I’ve never
got a good grasp on where you put code!

Code or helper method placed in helpers can only be called from views,
if I’m not mistaken.

Basically right.

Code that is specific to a model or controller is also a no-brainer -
but what about code that you want to share in different models/
controllers.

What if I have a function unformatPhone that I want to call in a
model’s before_save event - where to I stick it so that it can be
called by all models and maybe even from a view?

Well, first of all, you should call it unformat_phone. This isn’t Java.

Is my only choice in the application_controller? Is that a good
choice?

That won’t work at all. You should put it in the model.

To share code between models, you have the same two choices that you
have for sharing code between any classes (remember, there’s nothing
magical about models):

  1. Put it in a module and include it in the models you want to use it,
    or
  2. Create a subclass of ActiveRecord, put the code there, and have the
    models inherit from that.

[…]

If anyone can point me to a good tutorial on where you put code, I’d
be thankful.

You don’t need a tutorial here, I think. You just need to remember that
inheritance and module inclusion are fundamental Ruby tricks that should
be on your radar.

Best,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]

On Sep 3, 3:06 pm, Marnen Laibow-Koser <rails-mailing-l…@andreas-
s.net> wrote:

To share code between models, you have the same two choices that you
have for sharing code between any classes (remember, there’s nothing
magical about models):

  1. Put it in a module and include it in the models you want to use it,
    or
  2. Create a subclass of ActiveRecord, put the code there, and have the
    models inherit from that.

or 3, decide that this code deserves to be in a class of its own.

Fred