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 (http://github.com/tenderlove/namecase/tree/master) 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.
Marnen Laibow-Koser
2009-Sep-03 14:06 UTC
Re: Where to I put code accessible in all model?
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 marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/.
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> > [...] > > > 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-Koserhttp://www.marnen.org > mar...-sbuyVjPbboAdnm+yROfE0A@public.gmane.org > -- > Posted viahttp://www.ruby-forum.com/.