Hi -- On Tue, 15 Sep 2009, David Masover wrote: > On Sunday 13 September 2009 11:18:52 am Gaspard Bucher wrote: >> Damned ! This means that all the dynamic methods created by rails with >> "has_one" and such cannot be overwritten by including a module except if >> you write: >> >> module A >> def self.included(base) >> base.send(:define_method, 'foo') do >> puts "'foo' from A" >> end >> end >> end >> >> Any other solution ? > > As others said, drop the 'define_method'. I'd take it a step further: > > module A > module ClassMethods > def foo > puts "'foo' from A" > end > end > def self.included(base) > base.send :extend, ClassMethods That's the long way round :-) base.extend(ClassMethods) > I would even go so far as to call this a best practice. Thoughts? The name "ClassMethods" is potentially a bit confusing, since they're not exactly class methods... but I think it's an effective way to do what it does. I don't think it's inherently a better practice than, say, extending a class explicitly in the class -- meaning, I wouldn't go out of my way to set it up this way if it didn't fall into place fairly naturally in a give case. David -- David A. Black, Director Ruby Power and Light, LLC (http://www.rubypal.com) Ruby/Rails training, consulting, mentoring, code review Book: The Well-Grounded Rubyist (http://www.manning.com/black2)