I\'ve done some reading about how to extend ActiveRecord:Base class so my models would have some special methods. What is the easy way to extend it (step by step tutorial)?<
You can just extend the class and simply use inheritance.
class AbstractModel < ActiveRecord::Base
self.abstract_class = true
end
class Foo < AbstractModel
end
class Bar < AbstractModel
end
I have
ActiveRecord::Base.extend Foo::Bar
in an initializer
For a module like below
module Foo
module Bar
end
end
You can also use ActiveSupport::Concern
and be more Rails core idiomatic like:
module MyExtension
extend ActiveSupport::Concern
def foo
end
module ClassMethods
def bar
end
end
end
ActiveRecord::Base.send(:include, MyExtension)
[Edit] following the comment from @daniel
Then all your models will have the method foo
included as an instance method and the methods in ClassMethods
included as class methods. E.g. on a FooBar < ActiveRecord::Base
you will have: FooBar.bar
and FooBar#foo
http://api.rubyonrails.org/classes/ActiveSupport/Concern.html