ExpertiDict

Ruby · Avançado · Inglês · Técnico

single table inheritance

/ˈsɪŋɡəl ˈteɪbəl ɪnˈhɛɹɪtəns/substantivo

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

Veja também

Todos os termos de Ruby