¿Cómo implementar herencia con registros activos?¿Cómo implementar la herencia Active Record en Ruby on Rails?
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?
¿Cómo implementar herencia con registros activos?¿Cómo implementar la herencia Active Record en Ruby on Rails?
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?
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/
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 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.
es posible que desee aceptar una respuesta –