ExpertiDict

Ruby · Avançado · Português · Técnico

associação polimórfica

/asosiaˈsɐ̃w poliˈmɔfikɐ/substantivo

Associação do ActiveRecord em que um model pode pertencer a vários tipos de model, guardando id e tipo em duas colunas. Usa polymorphic: true e as:.

Onde usar

Aparece em comentários, anexos e tags que servem a vários models, com colunas como comentavel_id e comentavel_type. O banco não cria chave estrangeira para o tipo, perdendo integridade referencial.

Em código

class Comentario < ApplicationRecord
  belongs_to :comentavel, polymorphic: true
end
class Post < ApplicationRecord
  has_many :comentarios, as: :comentavel
end
# colunas: comentavel_id, comentavel_type

Exemplos

O comentário é polimórfico: pode pertencer a um post ou a um vídeo.

Cuidado: uma associação polimórfica não tem chave estrangeira no banco.

Cuidado

Não a use só para evitar tabelas separadas: sem chave estrangeira real, os dados podem ficar órfãos e consultas por tipo ficam mais difíceis de otimizar.

Sinônimos

polymorphic association

Veja também

Todos os termos de Ruby