类:Mongoid::ModelResolver
Overview
用于根据判别键解析模型类的默认类。 给定一个键,它将返回相应的模型类(如果有)。 默认下,它会查找名称与给定键匹配的类,但可能会提供其他映射。
还可以实例化多个解析程序,甚至实现自己的解析程序,以便不同的类集可以使用独立的解析机制。
常量摘要折叠
- INSTANCE_MUTEX =
此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。
用于实例'.实例`方法是线程安全的。
互斥锁.new
类方法摘要折叠
-
。实例⇒ Mongoid::ModelResolver
返回 ModelResolver 的默认实例。
-
。 register_resolver (resolver, name) ⇒ 对象
用给定名称注册给定解析程序。
-
。解析程序 (identifier_or_object = : 默认) ⇒ Mongoid::ModelResolver::Interface
返回与该参数对应的解析程序实例。
-
。解析器 ⇒ Hash<Symbol => Mongoid::ModelResolver::Interface>
返回已注册解析程序的映射。
实例方法摘要折叠
-
# 初始化 ⇒ ModelResolver
构造函数
实例化一个新的 ModelResolver实例。
-
#register (klass, *keys) ⇒ 对象
使用给定的键注册给定的模型类。
构造函数详情
# 初始化 ⇒ ModelResolver
实例化一个新的 ModelResolver实例。
75 76 77 78 |
# File 'lib/mongoid/model_resolver.rb', line 75 def 初始化 @key_to_model = {} @model_to_keys = {} end |
类方法详细信息
。实例⇒ Mongoid::ModelResolver
返回 ModelResolver 的默认实例。
27 28 29 |
# File 'lib/mongoid/model_resolver.rb', line 27 def 实例 @instance ||= INSTANCE_MUTEX.同步 { @instance ||= new } end |
。 register_resolver (resolver, name) ⇒ 对象
用给定名称注册给定解析程序。
68 69 70 71 |
# File 'lib/mongoid/model_resolver.rb', line 68 def register_resolver(解析器, 名称) 解析器[名称.to_sym] = 解析器 self end |
。解析程序 (identifier_or_object = : 默认) ⇒ Mongoid::ModelResolver::Interface
返回与该参数对应的解析程序实例。
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/mongoid/model_resolver.rb', line 52 def 解析器(identifier_or_object = :default) 案例 identifier_or_object when nil, false then nil when true, :default then 实例 when 字符串, 符号 解析器.获取(identifier_or_object.to_sym) do |key| 提高 Mongoid::Errors::UnrecognizedResolver, key end else identifier_or_object end end |
。解析器 ⇒ Hash<Symbol => Mongoid::ModelResolver::Interface>
返回已注册解析程序的映射。 此处不包括默认解析程序。
36 37 38 |
# File 'lib/mongoid/model_resolver.rb', line 36 def 解析器 @resolvers ||= {} end |
实例方法详细信息
#register (klass, *keys) ⇒ 对象
使用给定的键注册给定的模型类。 除了给定的键之外,类名本身也将作为标识类的键包含在内。 密钥按优先级顺序给出,优先级最高的密钥在最前面,优先级最低的在最后。 如果未明确给出类名,则类名始终具有最低优先级。
如果多次调用,则较新的键比较旧的键具有更高的优先级。 所有重复的键都将被删除。
90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/mongoid/model_resolver.rb', line 90 def 报名(klass, *密钥) default_key = klass.名称 @model_to_keys[klass] = [ *密钥, *@model_to_keys[klass], default_key ].uniq @key_to_model[default_key] = klass 密钥.每 do |key| @key_to_model[key] = klass end self end |