Banco de dados legado, herança de tabela única e Ruby on Rails

Herança de tabela única em Ruby on Rails significa que você armazena o nome da classe da subclasse na typecoluna da tabela do banco de dados. No entanto, se esse valor armazenado pelo sistema legado não seguir o método Ruby, você apenas precisa ter certeza de que a classe afetada substitui o método da classe find_sti_class(type_name).

O exemplo a seguir armazenaria e esperaria o valor WineGlasse BeerGlassna typecoluna por padrão. Para ser capaz de reutilizar a semântica existente, certifique-se de que cada classe defina seu sti_name e que a superclasse trate da lógica para mapear o valor do tipo para uma classe real.

id | type       | price
1 | wine_glass | 100
2 | beer_glass | 75
class Glass < ActiveRecord::Base
def self.find_sti_class(type_name)
type_name
.camelize.constantize
end
end

class BeerGlass < Glass
def self.sti_name
:beer_glass
end
end

class WineGlass < Glass
def self.sti_name
:wine_glass
end
end