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:

  1. O cavalo é vendido para outro proprietário
  2. O proprietário troca de treinadores ou jóquei
  3. O cavalo é reivindicado por um novo proprietário

Como está agora, eu tenho modelo isso com as seguintes tabelas:

  1. cavalos
  2. conexões (tabela de junção)
  3. 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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top