Virgin STI ajuda
-
21-09-2019 - |
Pergunta
Estou trabalhando em um aplicativo de corrida de cavalos e estou tentando utilizar a STI para modelar as conexões de um cavalo. As conexões de um cavalo são compostas por seu proprietário, treinador e jóquei. Com o tempo, as conexões podem mudar por vários motivos:
- O cavalo é vendido para outro proprietário
- O proprietário troca de treinadores ou jóquei
- O cavalo é reivindicado por um novo proprietário
Como está agora, eu tenho modelo isso com as seguintes tabelas:
- cavalos
- conexões (tabela de junção)
- As partes interessadas (as partes interessadas têm três subsusas: Jockey, treinador e proprietário)
Aqui estão minhas clases e associações:
class Horse < ActiveRecord::Base
has_one :connection
has_one :owner_stakeholder, :through => :connection
has_one :jockey_stakeholder, :through => :connection
has_one :trainer_stakeholder, :through => :connection
end
class Connection < ActiveRecord::Base
belongs_to :horse
belongs_to :owner_stakeholder
belongs_to :jockey_stakeholder
belongs_to :trainer_stakeholder
end
class Stakeholder < ActiveRecord::Base
has_many :connections
has_many :horses, :through => :connections
end
class Owner < Stakeholder
# Owner specific code goes here.
end
class Jockey < Stakeholder
# Jockey specific code goes here.
end
class Trainer < Stakeholder
# Trainer specific code goes here.
end
Um final do banco de dados, inseri uma coluna de tipo na tabela de conexões.
Eu modelei isso corretamente. Existe uma abordagem melhor/mais elegante. Agradecemos antecipadamente pelo seu feedback.
Jim
Solução
Por favor consulte esse documento Ao usar o STI em projetos de trilhos. Em relação às conexões - a Associação Polimórfica é a sua melhor aposta.
Outras dicas
Primeiro, devo dizer, não sei o que é STI. O que significa a abreviação?
Não entendo por que você precisa do modelo de conexão. Para minha compreensão do seu domínio, você pode deixar a conexão longe e não precisaria usar: através. Isso tornaria mais simples e melhoraria o desempenho. Não vejo nenhuma funcionalidade que o modelo de conexão adiciona.