Rails的Activerecord表如何引用自身?

时间:2009-07-30 15:46:57

标签: ruby-on-rails ruby activerecord

大家。我有一个想法,使用Activerecord来实现一些奇怪的东西,如下例所示:

SystemInfo < ActiveRecord::Base
  belongs_to :SystemInfo

end

这个想法是,系统A可以包含系统B作为其子代。所以我将生成应用程序的骨架:

 script/generate scaffold SystemInfo parent_id:integer name:string

然后,当我插入系统A时,我将使用系统A的ID作为系统B的parent_id(系统A的parent_id将等于'nil'。当我使用这样的命令时:

sysA = SystemInfo.find_by_id(1) # Get System A

我认为这可以获得系统A,它是孩子,系统B.类似于:

sysA.childrens # Get System B and other SystemInfo which has parent_id == 1 (System A's ID)

你能否建议我实施这个想法?我认为这是很常见的想法,我们应该可以这样做。 ;)

2 个答案:

答案 0 :(得分:15)

你有正确的想法。

class SystemInfo < ActiveRecord::Base
  belongs_to :parent, :class_name => 'SystemInfo'
  has_many :children, :class_name => 'SystemInfo', :foreign_key => 'parent_id'
end

s = SystemInfo.find(1)
s.children
# => [...]
s.parent
# => <SystemInfo>

答案 1 :(得分:2)

查看acts_as_tree。我在项目方式上使用它,所以我不确定它从那以后有多少变化,但我认为它可以满足您的需求。