2015-08-04 4 views
2

Что такое ActiveRecord :: Migration и ActiveRecord :: Base для класса, который ссылается на себя. Я моделирую объект, который «вилки» от существующей записи и сохраняет это отношение в поле: source. Это: поле источника будет содержать primary_key: id его родителя.Модель отношения fork в ActiveRecord

ответ

1

ActiveRecord не включает в себя «предопределенное» отношение этого типа, но вы можете сами определить его с помощью помощников has_many и belongs_to. Вам нужно будет добавить внешний ключ, например. my_parent_id модели (я буду называть его Thing):

rails g migration AddMyParentIdToThings my_parent:references 

Затем вам нужно будет определить отношение с указанием иностранного ключа и класса имен:

class Thing < ActiveRecord::Base 
    belongs_to :parent_thing, class_name: "Thing", foreign_key: :my_parent_id 
    has_many :child_things, class_name: "Thing", foreign_key: :my_parent_id 
end 

Вы можете опустить :foreign_key опцию belongs_to (неhas_many), если внешний ключ соответствует имени отношения с добавленным "_id" например:

belongs_to :my_parent, class_name: "Thing" 
0

Когда мне приходилось делать что-то подобное, мне нравится думать об этом как о модели, которая связывает себя.

В файле миграции вы просто бы добавить parent_id в качестве целого к этой таблице/модели

class Category < ActiveRecord::Base 
    belongs_to :parent, :class_name => "Category", :foreign_key => :parent_id 
    has_many :children, :class_name => "Category", :foreign_key => :parent_id 
end 
+0

Вы можете захотеть изменить 'has_many: child' в' has_many: children'. –

Смежные вопросы