RoR: has_one "oder der andere"? (Oder Polymorphismus ohne Vererbung.)
Hey all, ich habe eine interessante Anforderung für mein Projekt. Ich brauche einhas_one
Beziehung, in der es sich entweder um die eine oder die andere Klasse handelt, jedoch ohne Vererbung. Ich könnte mit der Vererbung davonkommen, wenn dies der einzige Weg ist, aber die beiden verknüpften Datensätze haben völlig unterschiedliche Daten und hängen überhaupt nicht zusammen.
Was ich herausfinden muss, ist ungefähr das Folgende.
# 1. Foo never belongs to anything.
# 2. Foo MUST have one assigned sub-record for validity.
# 3. Foo can only have either Bar or Baz assigned.
# 4. Bar and Baz have only ONE common property, and aren't
# related in either data or implementation.
class Foo < ActiveRecord::Base
# Attributes: id, name, value
has_one :assignment, :foreign_key => 'assigned_to', :readonly => true
# Could really use an :object_type for has_one here...
end
class Bar < ActiveRecord::Base
# Attributes: name,...
end
class Baz < ActiveRecord::Base
# Attributes: name,...
end
WoFoo
hat eine Zuweisung vom Typ entwederBar
oderBaz
; Sie haben nur eine gemeinsame Spalte, daher kann ich daraus vielleicht ein übergeordnetes Objekt erstellen. Wenn ich sie jedoch von einem gemeinsamen Objekt erben lasse (wenn die Daten, die sie enthalten, tatsächlich Orangen und Äpfel sind), muss ich dann eine Tabelle für die Aufzeichnung erstellen? Kann ich vielleicht damit durchkommen, wenn die Aufzeichnung eine abstrakte Aufzeichnung ist, die Kinder aber nicht?
Ich nehme an, Sie können jetzt meine Schwierigkeit sehen. Ich bin ziemlich neu in RoR, aber ich liebe es so weit. Ich bin mir sicher, dass es einen Ausweg gibt, aber ich werde verdammt sein, wenn ich nicht herausfinden kann, was es ist.