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, но люблю его до сих пор. Я уверен, что есть способ обойти это, но я буду проклят, если не смогу понять, что это такое.