在多态关联上,有两个引号说明了它们如何连接两个或多个模型。
[通过多态关联,模型可以属于多个其他模型,在单个关联上。
来源:https://guides.rubyonrails.org/v5.2/association_basics.html#polymorphic-associations
但是我们不想将一个模型与另一个任意模型相关联,我们想要拥有一个[[任何与其自身相关联的任意模型。] >>但是,除了reflexivity
关系之外,我们还想要是nesting
。从《自连接协会指南》中给出的示例开始,>>class Employee < ApplicationRecord
has_many :subordinates, class_name: "Employee",
foreign_key: "manager_id"
belongs_to :manager, class_name: "Employee"
end
例如,可以包含多个模型的树吗?有没有一种产生嵌套的多态自联接关联的方法
? (听起来像“少年变种忍者乌龟”一样大胆,戴上头巾并在任何情况下都以意大利别名定购比萨饼。)
我仍然对:foreign_key
约束,:polymorphic
-选项和reference
类型以及它们产生什么/如何协同工作还不确定。他们似乎都做大致相同。就是他们的迁移。即,使用一个ID为相同类的另一个实例创建一个字段,或者使用table_name(string
)和某个instance_id(BigInt
)创建两个字段。但是他们的合作多么微妙,我仍然缺乏理解。
如果我们将代码打包到module
中,我们至少不能将base
中的self.included(base)
参数用于class_name
键,而已将base.name
已经使用]
在多态关联上,有两个引号说明了它们如何连接两个或多个模型。使用多态关联,一个模型可以在一个关联上属于一个以上的其他模型。 ...
has_many ":child_#{base.name.snakecase.downcase.pluralize}".to_sym, class_name: base.name,
foreign_key: "parent_#{base.name.snakecase.downcase.singularize}_id"
belongs_to ":parent_#{base.snakecase.name.downcase.pluralize}".to_sym, class_name: base.name
has_many "#{base.name.snakecase.downcase.pluralize}".to_sym as: :nestable
belongs_to :nestable, polymorphic: true