2010-09-12 4 views
2

Je dois modéliser une structure d'association et l'association est divisée en divisions/subdivisions/sections etc. J'ai donc créé simple Entité-Attribut Modèle:Rails unique Héritage de Table en utilisant la clé étrangère (ID)

alt text

Je voudrais utiliser l'héritage de table unique de rail mais il semble que cela ne fonctionne que si la colonne type est une chaîne. Ma question est comment y parvenir avec mon approche? Comme j'utilise une clé étrangère comme "type", je dois d'abord interroger le "nom du type". Est-ce que quelqu'un a déjà fait ça?

+0

Je voudrais aussi pouvoir faire ceci. – pingu

Répondre

1

Je vous recommande d'ajouter un attribut String "type" à votre table de structure pour satisfaire l'héritage de table unique, et d'ajouter des callbacks before_save pour définir les valeurs correctes sur chaque table.

Dites que vous avez un StructureType avec le nom "Basic". Dans Rails cela signifie que vous voudriez avoir la hiérarchie des classes:

Structure < ActiveRecord :: Base BasicStructure < Structure

En classe Structure add:

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 

Hope this helps. Notez que cette approche signifie que StructureType.name doit être immuable: une fois créé, il ne doit jamais être modifié, sauf par une migration de base de données qui met à jour les deux tables en conséquence.

K

Questions connexes