モデル間の複雑な関係を理解しようとしています。「Skill」と「Occupation」という2つの継承タイプを持つ「Concept」というモデルがあります。基本的に、これは各概念がカテゴリを表すことを意味しますが、概念は、階層ツリーに十分深く入る場合のスキルまたは職業になることもあります。
私はSTIを使用してこの階層を解決しています。したがって、Conceptsテーブルのスキーマは次のようになります。
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
タイプ列は、コンセプトが実際の「コンセプト」であるか「スキル」/「職業」であるかを決定します。ただし、問題は次の関係にあります。
編集:
- コンセプトは、単一の親コンセプトに属することができます
- 職業はひとり親の概念に属することができます
- スキルは複数の親コンセプトに属することができます
- スキルには子供がいません
- 職業には子供がいません
基本的に、次のようなものがあります。
> concept1
> concept2 concept3
> concept4 concept5 concept6 concept7 skill1
> occup1 skill2 occup2 skill5
> occup7 skill2 occup3 skill4
> occup4 skill1 occup8
私が説明しようとしていることを、写真が少し明確になっていることを願っています。現在、親子関係を解決するために次の移行を作成しましたが、これを関連付けにマップする方法がわかりません...
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
最終的には、次の可能性があります。
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 => []
これが可能であることを願っています...