Ruby · Avançado · Português · Técnico
associação polimórfica
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_typeExemplos
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