Ruby on rails 有很多孩子和父母吗

Ruby on rails 有很多孩子和父母吗,ruby-on-rails,associations,database-relations,Ruby On Rails,Associations,Database Relations,我试图找出一个模型之间的复杂关系。 我有一个叫做“概念”的模型,它有两种继承类型,叫做“技能”和“职业”。基本上,这意味着每个概念代表一个类别,但当深入到层次树中时,概念也可以是一种技能或职业 我正在使用STI解决这个层次结构。因此,我的Concepts表模式如下所示: class CreateConcepts < ActiveRecord::Migration def self.up create_table :concepts do |t| t.string :

我试图找出一个模型之间的复杂关系。 我有一个叫做“概念”的模型,它有两种继承类型,叫做“技能”和“职业”。基本上,这意味着每个概念代表一个类别,但当深入到层次树中时,概念也可以是一种技能或职业

我正在使用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

希望这是可能的…

您可以在rails中建模层次关系。您的迁移已经完成了大部分工作。添加以下关系应允许您执行所需的方法调用:

def Concept < ActiveRecord::Base
  has_many :child_links, :class_name => 'ConceptLink', :foreign_key => 'parent_id'
  has_many :children, :through => :child_links

  has_many :parent_links, :class_name => 'ConceptLink', :foreign_key => 'child_id'
  has_many :parents, :through => :parent_links
end

def ConceptLink < ActiveRecord::Base
  belongs_to :child, :class_name => "Concept"
  belongs_to :parent, :class_name => "Concept"
end
def概念'ConceptLink',:foreign\u key=>'parent\u id'
有多个:child,:至=>:child\u链接
有很多:父链接,:class\u name=>'ConceptLink',:foreign\u key=>'child\u id'
有很多:父链接,:通过=>:父链接
结束
def ConceptLink“概念”
属于:父级,:类名称=>“概念”
结束

我还想了解一下,在解释rails中的父子映射方面,哪一个做得很好。

您可以在rails中建模层次关系。您的迁移已经完成了大部分工作。添加以下关系应允许您执行所需的方法调用:

def Concept < ActiveRecord::Base
  has_many :child_links, :class_name => 'ConceptLink', :foreign_key => 'parent_id'
  has_many :children, :through => :child_links

  has_many :parent_links, :class_name => 'ConceptLink', :foreign_key => 'child_id'
  has_many :parents, :through => :parent_links
end

def ConceptLink < ActiveRecord::Base
  belongs_to :child, :class_name => "Concept"
  belongs_to :parent, :class_name => "Concept"
end
def概念'ConceptLink',:foreign\u key=>'parent\u id'
有多个:child,:至=>:child\u链接
有很多:父链接,:class\u name=>'ConceptLink',:foreign\u key=>'child\u id'
有很多:父链接,:通过=>:父链接
结束
def ConceptLink“概念”
属于:父级,:类名称=>“概念”
结束

我还想了解一下,哪种方法可以很好地解释rails中的父子映射。

我可能可以在类上使用自定义属性来实现它,但我希望如果关联可以解决这个问题,我可能可以在类上使用自定义属性来实现它,但我希望协会能解决这个问题。不幸的是,由于需求变化,我不得不打破我的STI模型。。。所以对于家长来说,这变得容易多了。但很高兴知道我走对了路,谢谢你。不幸的是,由于需求变化,我不得不打破我的STI模型。。。所以对于家长来说,这变得容易多了。但很高兴知道我走对了路