Наследование одной таблицы Rails с использованием внешнего ключа (ID) - PullRequest
2 голосов
/ 12 сентября 2010

Мне нужно смоделировать структуру ассоциации, и ассоциация делится на подразделения / подразделения / секции и т. Д. Итак, я создал простую модель атрибута сущности:

alt text

Я бы хотел использовать наследование одиночной таблицы Rail, но похоже, что это работает, только если столбец типа является строкой.Мой вопрос: как этого добиться с помощью моего подхода?Так как я использую внешний ключ в качестве «типа», мне придется сначала запросить «имя типа».Кто-нибудь делал это раньше?

1 Ответ

1 голос
/ 31 мая 2011

Я бы порекомендовал добавить атрибут String "type" в вашу структурную таблицу для удовлетворения наследования одной таблицы и добавить обратные вызовы before_save для установки правильных значений в любой таблице.

Скажем, у вас есть StructureType с именем "Basic". В Rails это означает, что вы хотите иметь иерархию классов:

Структура

В класс структуры добавить:

before_create :set_structure_type_fk

def set_structure_type_fk
  self.structure_type = StructureType.find_by_name(\ 
      self.class.name.gsub(/Structure/, '').downcase)
end

Надеюсь, это поможет.

Обратите внимание, что этот подход означает, что StructureType.name должен быть неизменным: после создания он никогда не должен изменяться, за исключением миграции базы данных, которая обновляет обе таблицы соответственно.

K

...