2010-09-12 1 views
2

Я должен моделировать структуру ассоциации и ассоциации делится на разделы/подразделений/отделов и т.д. Таким образом, я создал простой Entity-Attribute Модель:Rails Single Table Inheritance с помощью иностранных ключа (ID)

alt text

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

+0

Я также хотел бы иметь возможность сделать это. – pingu

ответ

1

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

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

< Структура ActiveRecord :: Base BasicStructure < Структура

В структуре класса объявлении:

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