Как таблица Activerecord Rails может ссылаться на себя? - PullRequest
6 голосов
/ 30 июля 2009

все. У меня есть идея использовать Activerecord для реализации чего-то странного, как в примере ниже:

SystemInfo < ActiveRecord::Base
  belongs_to :SystemInfo

end

Идея в том, что система A может содержать систему B в качестве дочернего элемента. Поэтому я сгенерирую скелет приложения как:

 script/generate scaffold SystemInfo parent_id:integer name:string

и затем, когда я вставляю Систему A, я буду использовать ID Системы A в качестве parent_id Системы B (parent_id Системы A будет равен 'nil'. И когда я использую команду, подобную этой:

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

Я думаю, что это возможно, чтобы получить Систему А, и это дочерняя, Система Б. Подобно:

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

Не могли бы вы предложить мне руководство по реализации этой идеи? Я думаю, что это довольно распространенная идея, и мы должны сделать это. ;)

Ответы [ 2 ]

15 голосов
/ 30 июля 2009

У вас правильная идея.

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>
2 голосов
/ 30 июля 2009

Посмотрите на acts_as_tree. Я использовал его в проекте way назад, поэтому я не уверен, насколько сильно он изменился с тех пор, но я думаю, что он делает то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...