当它也属于另一个模型时,如何创建自连接项?

How do I create a self join item when it also belongs to another model?

我正在尝试为名为:子系统的模型建立自连接关系。在这种情况下,子系统表示 java 包、class 或方法。 我已经阅读了 rails 文档,在那里我看到我可以像这样使用它:

class Subsystem < ActiveRecord::Base
  has_many :child_subsystems, class_name: "Subsystem",
                          foreign_key: "parent_id"

  belongs_to :parent, class_name: "Subsystem"
end

我还查看了几个示例,其中大多数情况下都没有描述“创建部分”。 我的问题是我正在寻找创建子系统的最佳方法,因为: 子系统模型也属于一个项目。 现在我创建了如下子系统:

project.subsystems.create(params)

我希望这张图片能让它更好地理解。一个项目,可以有0到多个子系统,每个子系统也可以有0到多个子系统。

Subsystems

我看过自连接的示例,其中人们使用构建创建项目关系,但我不确定如何将其与我现有的创建相结合:project.subsystems.create。

有人可以帮帮我吗?提前致谢!

您创建自加入协会的方式非常正确。

如果要创建属于项目的子系统,可以执行 project.subsystems.create(...),如果要创建属于子系统的子系统,可以执行 subsystem.child_subsystems.create(..)。您有效地调用了模型中定义的关联的名称(复数表示有很多关联)。

构建和创建方法之间的区别在于构建有效地调用 new 而创建调用 newsave。当您创建或构建与模型中定义的其他实例相关联的实例时,返回的对象将包含构建或创建它们的记录的外键。