RoR: has_one "ou o outro"? (Ou, polimorfismo sem a herança.)

Ei, pessoal, tenho um requisito interessante para o meu projeto. eu preciso dehas_one relacionamento em que é uma classe ou outra, mas sem herança. Eu poderia me safar da herança se essa fosse a única maneira, mas os dois registros associados têm dados completamente diferentes e não estão relacionados.

O que eu preciso descobrir é algo como o seguinte.

# 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

OndeFoo tem uma atribuição, do tipoBar ouBaz; eles compartilham apenas uma coluna comum, então talvez eu possa criar um objeto pai a partir disso. No entanto, se eu os herdar de um objeto comum (quando os dados que eles contêm realmente são laranjas e maçãs), devo criar uma tabela para o registro? Talvez eu possa me safar se o registro for abstrato, mas as crianças não?

Suponho que agora você pode ver minha dificuldade. Sou bastante novo no RoR, mas estou adorando até agora. Tenho certeza de que há uma maneira de contornar isso, mas ficarei arrasado se não conseguir descobrir o que é.

questionAnswers(2)

yourAnswerToTheQuestion