generalização/especialização com ActiveRecord
|
|
Olá pessoal, Estou precisando resolver uma situação de generalização/especialização da minha modelagem no Rails e estou apanhando um pouco. A principio achei q resolveria apenas usando uma herança simples, mas vejo que não esta funcionando. Tentei fazer da sequinte forma: Porém quando instancio a classe Person, ele esta pegando apenas os atributos da tabela contacts do meu BD, ele simplesmente ignora os campos da tabela people. Qual é a forma correta de se fazer esta generalização/especialização? Alguém tem alguma dica? Valeu!!! |
|
|
Para usar single-table inheritance, crie uma coluna type de tipo string na tabela Contacts. Nesse caso, todos os atributos de Company e Person ficam nessa tabela. |
|
|
pelo que ele escreveu ele esta querendo utilizar table per class, e não single table inheritance … |
|
|
Urubatan, Quase sempre composição é melhor que herança. Mas tem certos casos que não consigo ver como fazer usando composição. Este é um exemplo: http://twelvelabs.com/singletable/index.html |
|
|
Pois é… realmente a idéia inicial, que tinha previsto no MER seria utilizar table per class, mas estou desistindo devido as complicações do AR. Então estou resolvendo ussando STI mesmo pra facilitar, apesar de não achar ser esta a melhor solução. Mas realmente seria interessante descobrir como fazer table per class, pois existem situações que isto faz muita falta. |
|
|
Isso tem jeitão de Associação Polimórfica. Aqui logo de cara já mata teu exemplo. E aqui outras cositas más. |
|
|
Pois é, daria pra amarrar com associação polimórfica, criando uma associação “contactable” pra fazer a amarração com Company e Person. Aí se houver comportamento para compartilhar você pode criar um módulo. STI por outro lado não é uma maravilha nem pela ótica da pureza de design nem pela eficiência, mas é tão simples em Rails que é difícil de ignorar. |

