Ich habe ein Modell, das ein Content
Artikel darstellt, der einige Bilder enthält. Die Anzahl der Bilder ist festgelegt, da diese Bildreferenzen sehr spezifisch für den Inhalt sind. Zum Beispiel bezieht sich das Modell Content
zweimal auf das Modell Image
(Profilbild und Hintergrundbild). Ich versuche, ein generisches has_many
zu vermeiden, und bleib bei mehreren has_one
. Die aktuelle Datenbankstruktur sieht so aus:Rails has_one vs gehört zu Semantik
contents
- id:integer
- integer:profile_image_id
- integer:background_image_id
images
- integer:id
- string:filename
- integer:content_id
Ich kann einfach nicht herausfinden, wie man die Assoziationen hier richtig einrichtet. Das Content
Modell könnte zwei belongs_to
Verweise auf eine Image
enthalten, aber das scheint nicht semantisch richtig zu sein, weil idealerweise ein Bild zum Inhalt gehört, oder mit anderen Worten, der Inhalt hat zwei Bilder.
Dies ist das Beste, was ich von (durch die Semantik zu brechen) einfiel:
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
Bin ich weg, und es ein besserer Weg, diese Vereinigung zu erreichen?
Single Table Vererbung funktioniert perfekt für mein Problem. Weißt du, wie ich STI mit polymorphen Assoziationen integrieren würde? Wenn beispielsweise zusammen mit dem Inhalt einige Bilder Teil der Dokumentmetadaten waren, wurden beide - Inhalts- und Metadatenbilder in der Bildtabelle gespeichert. – Anurag
vielen Dank für den Artikel. das muss der beste Artikel zur Single Table Inheritance für Rails im Netz sein! – Anurag
Wie würde Content für die "einfache Antwort" wissen, auf welche Bilder verwiesen werden soll, wenn in seiner db-Tabelle keine Fremdschlüssel vorhanden sind? – greg7gkb