El Miércoles, 27 de Septiembre de 2006 20:55, Miguel e. Zaldivar hdez
escribió:
En la documentacion del API de Rails que ponian aqui mismo se hace
referencia ademas de una que nunca he visto:
belongs_to :attachable, :polymorphic => true
y la verdad que el ejemplo que ponen alli esta un poco pequeño, alguien
ha trabajado con ella o conoce la utilidad de esta relacion???
Esta relación es realmente útil cuando tratas de definir una relación
con otra
clase “cualquiera” (no determinada en el momento de definir la clase).
Dave T., en el AWDwR2[1], usa un catálogo como ejemplo. Tiene una
clase
CatalogEntry que simboliza una registro de un catálogo, que puede
relacionarse con una imagen (Image), un artÃculo (Article) o un sonido
(Sound). Cada registro del catálogo tiene una relación belongs_to
:resource
que puede implicar a un objeto de cualquiera de esas tres clases. La
cosa
queda asÃ:
class CatalogEntry < ActiveRecord::Base
belongs_to :resource, :polymorphic => true
end
class Article < ActiveRecord::Base
has_one :catalog_entry, :as => :resource
end
E igual para las clases Sound e Image.
La tabla correspondiente a CatalogEntry tendrá un campo resource_id y
otro
adicional resource_type, para saber de qué clase estamos hablando. Por
supuesto, no puedes tener integridad referencial si usas este esquema.
Las relaciones polimórficas se pueden usar también para paliar uno de
los
posibles efectos de la STI: tener demasiados campos en una tabla. Se
podrÃan
definir varias clases (cada una con su tabla) y las relaciones que antes
eran
de la clase padre ahora podrÃan ser polimórficas. No sé si se entiende.
salu2
Saludos.
[1] http://www.pragmaticprogrammer.com/title/rails/