Extensions for ActiveModel to implement multiple types of models