Ruby · Avançado · Inglês · Técnico
single table inheritance
Estratégia do ActiveRecord em que várias subclasses de um model compartilham uma só tabela, distinguidas pela coluna type. Cada registro é instanciado na classe indicada.
Onde usar
Aparece em hierarquias como Veiculo, Carro e Moto. Funciona bem quando as subclasses têm poucos campos próprios; com muitos, a tabela vira um monte de colunas quase sempre nulas.
Em código
# tabela veiculos tem a coluna type
class Veiculo < ApplicationRecord; end
class Carro < Veiculo; end
class Moto < Veiculo; end
Carro.create!(nome: "Gol")
Veiculo.first.class # => Carro
Moto.all.to_sql # WHERE type = 'Moto'Exemplos
We use single table inheritance for the vehicle types.
Usamos single table inheritance para os tipos de veículo.
The type column tells Rails which subclass to build.
A coluna type diz ao Rails qual subclasse instanciar.
Cuidado
Evite quando as subclasses têm muitos campos diferentes: considere delegated_type ou tabelas separadas. E não use type como nome de coluna comum.
Sinônimos
STI