在ActiveRecord中建模fork关系

时间:2015-08-04 00:32:24

标签: ruby-on-rails activerecord rails-migrations

对于引用自身的类,ActiveRecord :: Migration和ActiveRecord :: Base看起来是什么样的。我正在建模一个对象,即"分叉"关闭现有记录并将该关系存储在:source字段中。那:source字段将包含primary_key:id的父亲。

2 个答案:

答案 0 :(得分:1)

ActiveRecord不包含"预定义的"此类关系,但您可以使用has_manybelongs_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

如果外键与关系名称匹配,并且附加{{1>,则可以省略:foreign_key上的belongs_to选项( has_many)例如:

"_id"

答案 1 :(得分: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