Aprenda cómo implementar Asociaciones Polimórficas

Porque no aprenderlo ahora!!

Polimorfismo y asociasiones polimorficas

 En POO (Programación Orientada a Objetos) el polimorfismo hace referencia a múltiples objetos y clases que responden de manera distinta al mismo mensaje. El siguiente ejemplo en Ruby demuestra lo anterior:

    class Games
    def play
    end
end

class MusicalInstruments
    def play
    end
end

class Violin < MusicalInstruments
    def play
        puts "I am playing the violin"
    end
end

class Guitar < MusicalInstruments
    def play
        puts "I am playing the guitar"
    end
end

Para cada instancia de las distintas clases  se obtendrán distintos resultados al ejecutar el mismo método “play”. Esta es una de las situaciones más comunes que pueden enfrentar los desarrolladores, en este caso se requiere hacer uso de esta definición y sus variantes. Tal es el caso, de requerir modelos que pertenezcan a más de un modelo en una única asociación. Supongamos el caso del “Like” entendido como modelo dentro de una aplicación de red social, se puede atribuir este modelo a diversas tablas como imágenes, comentarios, publicaciones, videos, entre otros; generando distintas respuestas en la aplicación. Considerando estas características se puede decir que todos estos modelos son “Likeables” entendiendo que es válido ejercer la acción del modelo “Like” de manera indiferente en cada caso en particular generando las siguientes relaciones.

class  Like < ApplicationRecord
    belongs_to :likeable, polymorphic: true
end
  
class  Video < ApplicationRecord
    has_many :likes, as: :likeable
end
  
class  Picture < ApplicationRecord

Para crear este tipo de relaciones se puede generar la migración del modelo de “likes” como se muestra a continuación.


class CreateLikes < ActiveRecord::Migration[3.0]
    def change
      create_table :likes do |t|
        t.references :likeable, polymorphic: true
        t.timestamps
      end
    end
end

Es importante resaltar que para generar este modelo se tiene la posibilidad de hacer uso de los generadores automáticos de modelos de Rails, escribiendo en la consola el comando $rails generate model Like likeable:references{polymorphic}.

En Black Box hacemos uso de polimorfismos para implementar bases de datos y código limpio, logrando que los sistemas de software sean escalables y se puedan mantener en el futuro, brindando así tranquilidad a nuestros clientes de un servicio óptimo y efectivo
Carlos Acosta
Full stack developer