模块:Mongoid::Fields
- 扩展方式:
- ActiveSupport::Concern
- 包含在:
- 可组合
- 定义于:
- lib/mongoid/fields.rb ,
lib/mongoid/fields/standard.rb,
lib/mongoid/fields/ 加密,
lib/mongoid/fields/localized.rb,
lib/mongoid/fields/foreign_key.rb,
lib/mongoid/fields/validators/macro.rb
Overview
此模块定义字段的行为。
在命名空间下定义
模块: 类方法、验证器类: Encrypted 、 ForeignKey 、 Localized 、 Standard
常量摘要折叠
- StringifiedSymbol =
Mongoid::StringifiedSymbol
- 布尔 =
Mongoid::布尔
- TYPE_MAPPINGS =
对于使用符号定义的字段,请使用正确的类。
{ 大量: 阵列, big_decimal: BigDecimal, 二进制: BSON::二进制文件, 布尔值: Mongoid::布尔, 日期: Date, date_time: 日期时间, float: Float, 哈希: 哈希, 整数: 整型, object_id: BSON::ObjectId, 范围: 范围, regexp: regexp, 设立: 集, string : 字符串, stringified_symbol: StringifiedSymbol, 符号: 符号, 时间: 时间 }.with_indifference_access
- IDS =
此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。
文档中_id字段的所有名称的常量。
这不包括_id字段的别名。
[ :_id, '_id', ].冻结
- INVALID_BSON_CLASSES =
此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。
不支持将BSON类作为字段类型
[ BSON::Decimal128, BSON::Int32, BSON::Int64 ].冻结
- TRANSLATIONS_SFX =
此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。
生成的已翻译字段的后缀。
'_translations'
类方法摘要折叠
-
。 database_field_name (name,relations, aliased_fields, aliased_associations) ⇒ string
private
获取所提供字段存储在数据库中的名称。
-
。选项(option_name, &block) ⇒ 对象
存储在字段上定义指定选项名称时要运行的提供的区块。
-
.options ⇒ Hash
将自定义选项名称的映射返回到其处理程序。
-
。 traverse_association_tree (key, fields,associations, aliased_associations) {|The, The,是否| ... } ⇒ 字段
private
向下遍历关联树并搜索给定键的字段。
实例方法摘要折叠
-
# apply_default (name) ⇒ 对象
对给定名称应用单个默认值。
-
# apply_defaults ⇒ 对象
立即应用所有默认值。
-
# apply_post_processed_defaults ⇒ Array<String>
将所有默认值应用于文档,即 procs。
-
#apply_pre_processed_defaults ⇒ Array<String>
将所有不是过程的默认值应用于文档。
-
#attribute_names ⇒ Array<String>
返回此对象可用属性的名称大量。
-
# database_field_name (name) ⇒ string
获取所提供字段存储在数据库中的名称。
-
# dot_dollar_field? (name) ⇒ true | false
private
此字段是以美元符号 ($) 开头还是包含点/句点 (.)?
-
#lazy_settable? (字段,值 ) ⇒ true | false
提供的字段是否为惰性求值?
-
# using_object_id? ⇒ true | false
文档是否使用对象ID?
-
# validate_writable_field_name! (name) ⇒ 对象
private
验证该字段是否以美元符号 ($) 开头或包含点/句点 (.)。
类方法详细信息
。 database_field_name (name,relations, aliased_fields, aliased_associations) ⇒ string
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
获取所提供字段存储在数据库中的名称。 用于确定字段是否有别名。 以递归方式查找嵌入式文档和字段的别名,用句点“.”分隔。字符。
请注意,此方法返回存储在数据库中的关联名称,而“关系”哈希使用其代码内别名。 为了检查关系哈希中的成员资格,首先必须在 aliased_associations 哈希中查找从此方法返回的string 。
此方法不会展开不是最后一项的 Belongs_to 关联的别名。 示例,如果有一所学校 has_many 学生,并且传递的字段名称为(从学生的角度来看):
school._id
belongs_to 关联的别名是该关联的 _id 字段。 因此,扩展此关联将产生:
school_id._id
这不是正确的字段名称,因为此处的目的不是获取_id字段的属性。 目的是获取引用文档的属性。 因此,如果传递的名称的一部分是belongs_to关联,而不是名称的最后部分,则不会扩展其别名,并返回:
school._id
如果 belongs_to 关联是名称的最后部分,我们将传回_id字段。
415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 |
# File 'lib/mongoid/fields.rb', line 415 def database_field_name(名称, 关系, aliased_fields, aliased_associations) return " " 除非 名称.现在? key = 名称.to_s 分段, 剩余 = key.拆分(' 。 ', 2) # 当存在 belongs_to 关联时,不获取字段的别名 # 不是最后一项。 因此,当以下任一情况时获取别名: # 以下为 true: # 1 . 这是最后一项,即没有剩余。 # 2 . 它不是关联。 # 3 . 它不是归属关联 if !剩余 || !关系.键?(分段) || !关系[分段].is_a?(关联::引用::属于关联) 分段 = aliased_fields[分段]&。dup || 分段 end return 分段 除非 剩余 关系 = 关系[aliased_associations[分段] || 分段] if 关系 k = 关系.klass " #{ egment}. #{ database_field_name( remaining, k.relations, k.aliased_fields, k.aliased_associations)} " else " #{ section } . #{剩下的} " end end |
。选项(option_name, &block) ⇒对象
存储在字段上定义指定选项名称时要运行的提供的区块。
对于处理程序可能执行的功能没有做出任何假设,因此如果字段定义中提供了“option_name”键,即使该键为 false 或 nil,也将始终调用该处理程序。
298 299 300 |
# File 'lib/mongoid/fields.rb', line 298 def 选项(option_name, 和块) [option_name] = 块 end |
.options ⇒ Hash
将自定义选项名称的映射返回到其处理程序。
309 310 311 |
# File 'lib/mongoid/fields.rb', line 309 def @options ||= {} end |
。 traverse_association_tree (key, fields,associations, aliased_associations) {|The, The,是否| ... } ⇒字段
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
向下遍历关联树并搜索给定键的字段。 为此,请用“.”分割键对于密钥的每个部分(方法):
-
如果方法为字段,则将方法、 字段和 is_field 设为 true 。
-
如果该方法是关联,则将 klass更新为关联的 klass,并将 meth、klass 和 is_field 生成为 false。
下一次迭代将使用 klass 的字段和关联继续遍历树。
340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 |
# File 'lib/mongoid/fields.rb', line 340 def traverse_association_tree(key, 字段, 关联, aliased_associations) klass = nil 字段 = nil key.拆分(' 。 ').each_with_index do |meth, i| fs = i == 0 ? 字段 : klass&。字段 rs = i == 0 ? 关联 : klass&。关系 作为 = i == 0 ? aliased_associations : klass&。aliased_associations # 关联可能有两个“键”,即名称和别名。 # 字段名称是用于将其存储在 klass 关系中的名称 # 和字段哈希,别名是用于存储该字段的内容 # 在数据库中。 输入到此函数的密钥是具有别名的 # key. 我们可以通过查看 # aliased_associations 哈希值。 别名 = meth if 作为 && a = 作为.获取(meth, nil) 别名 = a.to_s end 字段 = nil klass = nil if fs && f = fs[别名] 字段 = f 产量(meth, f, true) if block_given? elsif rs && rel = rs[别名] klass = rel.klass 产量(meth, rel, false) if block_given? else 产量(meth, nil, false) if block_given? end end 字段 end |
实例方法详细信息
# apply_default (name) ⇒对象
对给定名称应用单个默认值。
183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/mongoid/fields.rb', line 183 def apply_default(名称) 除非 属性.键?(名称) if 字段 = 字段[名称] 访问 = 字段.eval_default(self) 除非 访问.nil? || 字段.懒? attribute_will_change!(名称) 属性[名称] = 访问 end end end end |
# apply_defaults ⇒对象
立即应用所有默认值。
199 200 201 202 203 |
# File 'lib/mongoid/fields.rb', line 199 def apply_defaults pending_callbacks.删除(:apply_defaults) apply_pre_processed_defaults apply_post_processed_defaults end |
# apply_post_processed_defaults ⇒ Array<String>
将所有默认值应用于文档,即 procs。
170 171 172 173 174 175 |
# File 'lib/mongoid/fields.rb', line 170 def apply_post_processed_defaults pending_callbacks.删除(:apply_post_processed_defaults) post_processed_defaults.每 do |名称| apply_default(名称) end end |
#apply_pre_processed_defaults ⇒ Array<String>
将所有不是过程的默认值应用于文档。
158 159 160 161 162 |
# File 'lib/mongoid/fields.rb', line 158 def apply_pre_processed_defaults pre_processed_defaults.每 do |名称| apply_default(名称) end end |
#attribute_names ⇒ Array<String>
返回此对象可用属性的名称大量。
以与 ORM 无关的方式提供字段名称。 Rails v 3.1 + 使用此方法自动包装JSON请求中的参数。
214 215 216 |
# File 'lib/mongoid/fields.rb', line 214 def attribute_names self.class.attribute_names end |
# database_field_name (name) ⇒ string
获取所提供字段存储在数据库中的名称。 用于确定字段是否有别名。
227 228 229 |
# File 'lib/mongoid/fields.rb', line 227 def database_field_name(名称) self.class.database_field_name(名称) end |
# dot_dollar_field? (name) ⇒ true | false
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
此字段是以美元符号 ($) 开头还是包含点/句点 (.)?
263 264 265 266 |
# File 'lib/mongoid/fields.rb', line 263 def dot_dollar_field?(名称) n = aliased_fields[名称] || 名称 字段.键?(n) && (n.包括?(' 。 ') || n.start_with?('$')) end |
#lazy_settable? (字段,值) ⇒ true | false
提供的字段是否为延迟求值?
240 241 242 |
# File 'lib/mongoid/fields.rb', line 240 def lazy_settable?(字段, 值) !冻结? && 值.nil? && 字段.懒? end |
# using_object_id? ⇒ true | false
通过使用委托进行重构以提高类加载性能。
文档是否使用对象ID?
252 253 254 |
# File 'lib/mongoid/fields.rb', line 252 def using_object_id? self.class.using_object_id? end |
# validate_writable_field_name! (name) ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
验证该字段是否以美元符号 ($) 开头或包含点/句点 (.)。
276 277 278 279 280 |
# File 'lib/mongoid/fields.rb', line 276 def validate_writable_field_name!(名称) if dot_dollar_field?(名称) 提高 Errors::InvalidDotDollarAssignment.new(self.class, 名称) end end |