Herança de tabela única em Ruby on Rails significa que você armazena o nome da classe da subclasse na type
coluna 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 WineGlass
e BeerGlass
na type
coluna 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