2009-10-21 23 views

Respuesta

66

Rieles admite herencia de tabla única.

Desde el AR docs:

Active Record permite la herencia por almacenar el nombre de la clase en una columna que por defecto se denomina "tipo" (se puede cambiar mediante la sobreescritura Base.inheritance_column) . Esto significa que una herencia con este aspecto:

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

Al hacer Firm.create (: Nombre => "37signals"), este registro será guarda en la tabla empresas con el tipo = "Firma ". A continuación, puede buscar esta fila nuevamente utilizando 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 activará. En ese caso, funcionará como las subclases normales sin magia especial para diferenciando entre ellas o recargando el tipo correcto con find.

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

15

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 
6

ActiveRecord es compatible con las jerarquías de herencia asignación a una sola tabla (Single-table inheritance Tabla haría tener una columna type que almacena el nombre de un clase ctual 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 en here, pero esta forma particular no es portátil, AFAIK.