模块:Mongoid::Traversable::ClassMethods
- 定义于:
- lib/mongoid/traversable.rb
Overview
用于遍历行为的类级方法。
实例方法摘要折叠
-
#会遗传吗? ⇒ true | false
确定文档是否是另一个文档的子类。
-
#继承(子类) ⇒ 对象
继承时,我们希望从父类复制字段,并在子类上设立,从而模仿 Rails Edge 中已弃用的旧 class_inheritable_accessor 的行为。
-
# root_class ⇒ Mongoid::Document
返回当前类参与的 STI 树的根类。
实例方法详细信息
#会遗传吗? ⇒ true | false
确定文档是否是另一个文档的子类。
43 44 45 |
# File 'lib/mongoid/traversable.rb', line 43 def 会遗传吗? !!(超类 < Mongoid::文档) end |
#继承(子类) ⇒对象
继承时,我们希望从父类复制字段,并在子类上设立,从而模仿 Rails Edge 中已弃用的旧 class_inheritable_accessor 的行为。
rubocop:disable Metrics/AbcSize
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 |