Tengo un modelo que representa un artículo Content
que contiene algunas imágenes. La cantidad de imágenes se fija ya que estas referencias de imagen son muy específicas del contenido. Por ejemplo, el modelo Content
se refiere al modelo Image
dos veces (imagen de perfil e imagen de fondo). Estoy tratando de evitar un genérico has_many
, y atenerme a múltiples has_one
. La estructura de la base de datos actual se ve así:Rails has_one vs belongs_to semántica
contents
- id:integer
- integer:profile_image_id
- integer:background_image_id
images
- integer:id
- string:filename
- integer:content_id
No puedo encontrar la forma de configurar las asociaciones correctamente aquí. El modelo Content
podría contener dos referencias belongs_to
a Image
, pero eso no parece ser semánticamente correcto porque idealmente una imagen pertenece al contenido, o en otras palabras, el contenido tiene dos imágenes.
Esto es lo mejor que podía pensar (rompiendo la semántica):
class Content
belongs_to :profile_image, :class_name => 'Image', :foreign_key => 'profile_image_id'
belongs_to :background_image, :class_name => 'Image', :foreign_key => 'background_image_id'
end
allí estoy lejos, y una mejor forma de lograr esta asociación?
La herencia de una sola tabla funciona perfectamente para mi problema. ¿Sabes cómo voy a integrar las ITS con las asociaciones polimórficas? Por ejemplo, si junto con el contenido, había algunas imágenes que formaban parte de los metadatos del documento, y ambas imágenes de contenido y metadatos se almacenaban en la tabla de imágenes. – Anurag
muchas gracias por el artículo. ¡tiene que ser el mejor artículo sobre la herencia de una sola tabla para Rails en la red! – Anurag
Para la 'respuesta simple', ¿cómo sabría el contenido a qué imágenes hacer referencia si no hay claves externas en su tabla db? – greg7gkb