Hi everybody I would like a function as the "before_save" method in the model. But it must be the opposite. When I take out data from the database through the model, I want to call a function before the data are available in the controller. Can anyone help me? ---- >>>> thx <<<< ---- -- Posted via http://www.ruby-forum.com/.
You may be interested in looking at http://api.rubyonrails.com/classes/ActiveRecord/Callbacks.html where all the possible callbacks are documented. "after_find" or "after_initialize" may do what you are looking for. Anyway carefully read the caveats for these two since they have significant impact on your application performance. Paolo 2006/8/9, M. R. <ribi@schwingerverband.ch>:> Hi everybody > > I would like a function as the "before_save" method in the model. But it > must be the opposite. When I take out data from the database through the > model, I want to call a function before the data are available in the > controller. > > Can anyone help me? > > ---- >>>> thx <<<< ---- > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
Paolo Negri wrote:> You may be interested in looking at > > http://api.rubyonrails.com/classes/ActiveRecord/Callbacks.html > > where all the possible callbacks are documented. "after_find" or > "after_initialize" may do what you are looking for. Anyway carefully > read the caveats for these two since they have significant impact on > your application performance. > > Paolo > > 2006/8/9, M. R. <ribi@schwingerverband.ch>:That''s ok - I think after_find is my favorite. after_find :delete_type def delete_type if self.name =~ /(_f|_m)$/ (self.name).sub!(/(_f|_m)+$/, '''') end end -- Posted via http://www.ruby-forum.com/.
after_initialize might help you See ''The after_find and after_initialize exceptions'' at http://api.rubyonrails.com/classes/ActiveRecord/Callbacks.html Chris On 8/9/06, M. R. <ribi@schwingerverband.ch> wrote:> Hi everybody > > I would like a function as the "before_save" method in the model. But it > must be the opposite. When I take out data from the database through the > model, I want to call a function before the data are available in the > controller. > > Can anyone help me? > > ---- >>>> thx <<<< ---- > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
M. R. wrote:> Paolo Negri wrote: >> You may be interested in looking at >> >> http://api.rubyonrails.com/classes/ActiveRecord/Callbacks.html >> >> where all the possible callbacks are documented. "after_find" or >> "after_initialize" may do what you are looking for. Anyway carefully >> read the caveats for these two since they have significant impact on >> your application performance. >> >> Paolo >> >> 2006/8/9, M. R. <ribi@schwingerverband.ch>:That''s ok - I think after_find is my favorite. after_find :delete_type def delete_type if self.name =~ /(_f|_m)$/ (self.name).sub!(/(_f|_m)+$/, '''') end end So I save a username into the database, I add the extension _m (male) or _f (female) to the username (for example: miller_f oder miller_m). When I take out the data from the model, I want to delete this extension _m or _f so I only see the name "miller" without the extension. Why doesn''t run this code? -- Posted via http://www.ruby-forum.com/.
M. R. wrote:> So I save a username into the database, I add the extension _m (male) or > _f (female) to the username (for example: miller_f oder miller_m). When > I take out the data from the model, I want to delete this extension _m > or _f so I only see the name "miller" without the extension. > > Why doesn''t run this code? >Aside from the obvious question of why you are not storing the m/f as a separate field, I''d do this by overriding the ''name'' accessor. This has the advantage that it''s only going to execute the code when you need it. def name n = read_attribute(:name) n[0, n.size - 2] end This assumes that every name has _x on the end of it. Also, to only do this once per object, I''d cache the result - so this becomes: def name @name ||= begin n = read_attribute(:name) n[0, n.size - 2] end end For more, take a look at ''overwriting default accessors'': http://rubyonrails.org/api/classes/ActiveRecord/Base.html hth -- Richard Livsey http://livsey.org
From: http://api.rubyonrails.com/classes/ActiveRecord/Callbacks.html "Unlike all the other callbacks, after_find and after_initialize will only be run if an explicit implementation is defined (def after_find). In that case, all of the callback types will be called" Anyway, if the kind of stuff you need is what you exposed I think that defining a method in the model class to obtain the clean name would be a nicer solution than using the callback, so you can just call @obj.cleanname when you need the stripped version of the name. Paolo 2006/8/9, M. R. <ribi@schwingerverband.ch>:> M. R. wrote: > > Paolo Negri wrote: > >> You may be interested in looking at > >> > >> http://api.rubyonrails.com/classes/ActiveRecord/Callbacks.html > >> > >> where all the possible callbacks are documented. "after_find" or > >> "after_initialize" may do what you are looking for. Anyway carefully > >> read the caveats for these two since they have significant impact on > >> your application performance. > >> > >> Paolo > >> > >> 2006/8/9, M. R. <ribi@schwingerverband.ch>: > > > That''s ok - I think after_find is my favorite. > > after_find :delete_type > def delete_type > if self.name =~ /(_f|_m)$/ > (self.name).sub!(/(_f|_m)+$/, '''') > end > end > > So I save a username into the database, I add the extension _m (male) or > _f (female) to the username (for example: miller_f oder miller_m). When > I take out the data from the model, I want to delete this extension _m > or _f so I only see the name "miller" without the extension. > > Why doesn''t run this code? > > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
On 8/9/06, M. R. <ribi@schwingerverband.ch> wrote:> M. R. wrote: > > Paolo Negri wrote: > >> You may be interested in looking at > >> > >> http://api.rubyonrails.com/classes/ActiveRecord/Callbacks.html > >> > >> where all the possible callbacks are documented. "after_find" or > >> "after_initialize" may do what you are looking for. Anyway carefully > >> read the caveats for these two since they have significant impact on > >> your application performance. > >> > >> Paolo > >> > >> 2006/8/9, M. R. <ribi@schwingerverband.ch>: > > > That''s ok - I think after_find is my favorite. > > after_find :delete_type > def delete_type > if self.name =~ /(_f|_m)$/ > (self.name).sub!(/(_f|_m)+$/, '''') > end > end > > So I save a username into the database, I add the extension _m (male) or > _f (female) to the username (for example: miller_f oder miller_m). When > I take out the data from the model, I want to delete this extension _m > or _f so I only see the name "miller" without the extension. > > Why doesn''t run this code? >Err, not sure why it doesn''t run; but I must ask why you are doing this in the first place. What''s wrong with a gender column containing either male or female (text or foreign key to another table) or single table inheritance if you need behaviour specific to the sexes? Chris