模块:Mongoid::Traversable::ClassMethods

定义于:
lib/mongoid/traversable.rb

Overview

用于遍历行为的类级方法。

实例方法摘要折叠

实例方法详细信息

#会遗传吗?true | false

确定文档是否是另一个文档的子类。

例子:

检查文档是否为子类。

Square.hereditary?

返回:

  • ( true | false )

    如果可遗传,则为 true,否则为 false。



43
44
45
# File 'lib/mongoid/traversable.rb', line 43

def 会遗传吗?
  !!(超类 < Mongoid::文档)
end

#继承(子类) ⇒对象

继承时,我们希望从父类复制字段,并在子类上设立,从而模仿 Rails Edge 中已弃用的旧 class_inheritable_accessor 的行为。

rubocop:disable Metrics/AbcSize

例子:

从此类继承。

Person.inherited(Doctor)

参数:

  • 子类 ( class )

    继承类。



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/mongoid/traversable.rb', line 69

def 继承(子类)
  

  # 使用解析程序子系统注册新子类
  Mongoid::ModelResolver.报名(子类)

  @_type = nil
  子类.aliased_fields = aliased_fields.dup
  子类.localized_fields = localized_fields.dup
  子类.字段 = 字段.dup
  子类.pre_processed_defaults = pre_processed_defaults.dup
  子类.post_processed_defaults = post_processed_defaults.dup
  子类._declared_scopes = 哈希.new { |_hash, key| _declared_scopes[key] }
  子类.discriminator_value = 子类.名称

  # 我们需要在这里执行此操作,因为 discriminator_value 方法是
  # 在上面的子类中重写。
  子类.包括 DiscriminatorRetrieval

  # 如果继承正在发挥作用,则仅需要 _type字段,但需要
  # 同时添加到根类以实现向后兼容。
  return if 字段.键?(discriminator_key)

  default_proc = -> { self.class.discriminator_value }
  字段(discriminator_key, 默认: default_proc, 类型: 字符串)
end

# root_class Mongoid::Document

返回当前类参与的 STI 树的根类。 如果该类不是 STI 子类,则返回该类本身。

返回:



52
53
54
55
56
57
# File 'lib/mongoid/traversable.rb', line 52

def root_class
   = self
   = .超类 while .会遗传吗?

  
end