RoR: has_one «или другой»? (Или полиморфизм без наследования.)

Привет всем, у меня есть кое-что интересное требование для моего проекта. мне нужноhas_one отношения, где это либо один класс, либо другой, но без наследования. Я мог бы избежать наследования, если это единственный способ, но две ассоциированные записи имеют совершенно разные данные и не связаны вообще.

Что мне нужно понять, это что-то вроде следующего.

# 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

кудаFoo имеет одно назначение, типа либоBar или жеBaz; они имеют только один общий столбец, так что, возможно, из этого я смогу создать родительский объект. Однако, если я заставлю их наследовать от общего объекта (когда данные, которые они содержат, на самом деле являются апельсинами и яблоками), я должен составить таблицу для записи? Могу ли я сойти с рук, если запись является абстрактной, а дети - нет?

Полагаю, теперь ты видишь мои трудности. Я довольно новичок в RoR, но люблю его до сих пор. Я уверен, что есть способ обойти это, но я буду проклят, если не смогу понять, что это такое.

Ответы на вопрос(2)

Ваш ответ на вопрос