J'essaie de comprendre une relation complexe entre un modèle. J'ai un modèle appelé "Concept", qui a deux types d'héritage appelés "Compétence" et "Occupation". Fondamentalement, cela signifie que chaque concept représente une catégorie, mais un concept peut également être une compétence ou une occupation lorsque l'on va assez loin dans l'arbre hiéroglyphe. Je résous cette hiérarchie en utilisant STI. Donc, mon schéma pour la table Concepts ressemble à ceci:has_many enfants et has_many parents
class CreateConcepts < ActiveRecord::Migration
def self.up
create_table :concepts do |t|
t.string :uri, :null => false, :length => 255
t.string :type, :null => true, :length => 255
t.integer :isco_code, :null => true
t.timestamps
end
end
def self.down
drop_table :concepts
end
end
La colonne de type si le concept décrit que est un véritable « concept » ou une « compétence »/« Occupation ». Le problème maintenant cependant les relations suivantes:
EDIT:
- Un concept peut appartenir à un seul parent Concept
- Une profession peut appartenir à un seul parent Concept
- A La compétence peut appartenir à plusieurs parents Concepts
- Une compétence n'a pas d'enfants
- Une occupation n'a pas d'enfant
vous auriez donc basiquement quelque chose comme ceci:
> concept1
> concept2 concept3
> concept4 concept5 concept6 concept7 skill1
> occup1 skill2 occup2 skill5
> occup7 skill2 occup3 skill4
> occup4 skill1 occup8
J'espère que l'image est un peu clair ce que je suis en train d'expliquer. Actuellement, je ont créé la migration suivante pour tenter de résoudre la relation parent-enfant, mais je ne suis pas sûr de savoir comment la carte collaboration avec les associations ...
class CreateConceptLinks < ActiveRecord::Migration
def self.up
create_table :concept_links do |t|
t.integer :parent_id, :null => false
t.integer :child_id, :null => false
t.timestamps
end
end
def self.down
drop_table :concept_links
end
end
Ce que je veux finir avec est le suivant posssibilities:
concepta.parents => a Concept object
conceptb.children => an array of Conept objects
Occupation.parents => a Concept object
Occupation.children => []
Skill.parents => an array of Concept objects
Skill.children => []
Espérons que cela est même possible ...
Je peux probablement l'implémenter moi-même en utilisant des attributs personnalisés sur les classes, mais j'espérais que les associations puissent le résoudre –