¿Cómo implementar la herencia de Active Record en Ruby on Rails?

¿Cómo implementar herencia con registros activos?

Por ejemplo, quiero una clase Animal, clase Dog y clase Cat.

¿Cómo serían el modelo y el mapeo de la tabla de la base de datos?

Rails admite herencia de tabla única.

De los documentos de AR :

Active Record permite la herencia almacenando el nombre de la clase en una columna que por defecto se llama “tipo” (se puede cambiar sobrescribiendo Base.inheritance_column). Esto significa que una herencia se ve así:

class Company < ActiveRecord::Base; end class Firm < Company; end class Client < Company; end class PriorityClient < Client; end 

Cuando se hace Firm.create (: name => "37signals"), este registro se guardará en la tabla de empresas con type = "Firm". A continuación, puede buscar esta fila nuevamente usando Company.find (: first, "name = '37signals'") y devolverá un objeto Firm.

Si no tiene una columna de tipo definida en su tabla, la herencia de tabla única no se desencadenará. En ese caso, funcionará igual que las subclases normales sin magia especial para diferenciarlas o volver a cargar el tipo correcto con find.

Un buen tutorial está aquí: http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/

Modelos:

 class Animal < ActiveRecord::Base; end class Dog < Animal; end class Cat < Animal; end 

Migración:

 class CreateAnimals < ActiveRecord::Migration def self.up create_table :animals do |t| # Other attributes... t.string :type end end def self.down drop_table :animals end end 

ActiveRecord admite asignar jerarquías de herencia a una sola tabla ( herencia de tabla única . La tabla tendría un type columna que almacena el nombre de la clase real y se usa para seleccionar otras columnas específicas de clase.

Es posible implementar la asignación de herencia de tablas múltiples, como se muestra aquí , pero esta forma particular no es portátil, AFAIK.