Ho un modello che rappresenta un elemento Content
che contiene alcune immagini. Il numero di immagini è fisso in quanto questi riferimenti di immagine sono molto specifici per il contenuto. Ad esempio, il modello Content
si riferisce al modello Image
due volte (immagine del profilo e immagine di sfondo). Sto cercando di evitare un generico has_many
e di rimanere su più has_one
. L'attuale struttura del database è simile a:Rails has_one vs belongs_to semantics
contents
- id:integer
- integer:profile_image_id
- integer:background_image_id
images
- integer:id
- string:filename
- integer:content_id
Non riesco proprio a capire come configurare correttamente le associazioni qui. Il modello Content
potrebbe contenere due riferimenti belongs_to
a uno Image
, ma ciò non sembra semanticamente corretto perché idealmente un'immagine appartiene al contenuto o, in altre parole, il contenuto ha due immagini.
questo è il migliore che potevo pensare (rompendo la semantica):
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
io sono lontano, e un modo migliore per raggiungere questa associazione?
L'ereditarietà di una tabella singola funziona perfettamente per il mio problema. Sai come integrarei STI con le associazioni polimorfiche? Ad esempio, se insieme al contenuto, c'erano alcune immagini che facevano parte dei metadati del documento e entrambe le immagini del contenuto e dei metadati sono state memorizzate nella tabella delle immagini. – Anurag
grazie mille per l'articolo. questo deve essere il miglior articolo su Single Table Ereditarietà per Rails in rete! – Anurag
Per la 'risposta semplice', in che modo il Contenuto sa quali immagini fare riferimento se non ci sono chiavi esterne nella sua tabella db? – greg7gkb