Calling class methods from included module

Hi,

I have these two ActiveRecord models: UserEvent and CoordinateEvent.

The models are extended with the module MapEvent. MapEvent includes some
class methods and some instance methods.

Now, I want both models to use ActiveRecord’s serialize
(ActiveRecord::Base).

My MapEvent looks something like the following. I simply can’t figure
where to put “serialize :column_name”:

module MapEvent
  def self.included(base)
    base.extend(ClassMethods)
  end

  def a_method
  end

  module ClassMethods
    def another_method
    end
  end
end

How do I call the serialize method from the above context?

An extra question:
Also, it suddenly hit me, that instead of a module I could write
MapEvent as a class that inherits from ActiveRecord instead of a module

  • and then let UserEvent and CoordinateEvent inherit from MapEvent?
    Would you recommend this? Generally speaking, when should you use
    mixins/module and when you use inheritance?

Hope my questions are clear. Thanks in advance!

Well - I think I now can answer both of my questions myself. In case
anyone is curious here is what I’ve learned:

In order to call the serialize method that the two models inherited from
AR write this:
module MapEvent
def self.included(base)
base.serialize :command
end
end

This makes sense as serialize is just an instance method of the models.

And regarding the module/inheritance question I found an answer reading
these article (including the comments):

Modules should generally speaking be used when you just want to add
methods to your concrete classes. If you want to add new class or
instance variables use “normal” inheritance.