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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage