模块:Mongoid::Attributes::Dynamic
- 扩展方式:
- ActiveSupport::Concern
- 定义于:
- lib/mongoid/attributes/dynamic.rb
Overview
此模块包含动态属性的行为。
实例方法摘要折叠
-
#define_dynamic_before_type_cast_reader (name) ⇒ 对象
private
在类型转换之前为动态属性定义读取器方法。
-
#define_dynamic_reader (name) ⇒ 对象
private
为动态属性定义读取器方法。
-
#define_dynamic_writer (name) ⇒ 对象
private
为动态属性定义编写器方法。
-
# Inspect_Dynamic_fields ⇒ string
获取文档的已检查动态字段大量。
-
# method_missing (name, *args) ⇒ 对象
private
用于支持动态属性的访问器方法。
-
# process_attribute (name, value) ⇒ 对象
如果属性是动态的,请为其添加一个对象类型的字段并设置值。
-
# respond_to? (name, include_private = false) ⇒ true | false
覆盖 respond_to? 以便正确响应动态属性。
动态方法处理
此类通过method_missing方法处理动态方法
# method_missing (name, *args) ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
用于支持动态属性的访问器方法。
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/mongoid/attributes/dynamic.rb', line 120 def method_missing(名称, *args) attr = 名称.to_s return 超 除非 属性.has_key?(attr.Reader) if attr.writer? getter = attr.Reader define_dynamic_writer(getter) write_attribute(getter, args.first) elsif attr.before_type_cast? define_dynamic_before_type_cast_reader(attr.Reader) attribute_will_change!(attr.Reader) read_attribute_before_type_cast(attr.Reader) else getter = attr.Reader define_dynamic_reader(getter) attribute_will_change!(attr.Reader) read_raw_attribute(getter) end end |
实例方法详细信息
#define_dynamic_before_type_cast_reader (name) ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
在类型转换之前为动态属性定义读取器方法。
52 53 54 55 56 57 58 59 |
# File 'lib/mongoid/attributes/dynamic.rb', line 52 def define_dynamic_before_type_cast_reader(名称) class_eval do define_method(" #{ name } _before_type_cast ") do attribute_will_change!(名称) read_attribute_before_type_cast(名称) end end end |
#define_dynamic_reader (name) ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
为动态属性定义读取器方法。
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/mongoid/attributes/dynamic.rb', line 33 def define_dynamic_reader(名称) return 除非 名称.valid_method_name? class_eval do define_method(名称) do attribute_will_change!(名称) read_raw_attribute(名称) end end end |
#define_dynamic_writer (name) ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
为动态属性定义编写器方法。
69 70 71 72 73 74 75 76 77 |
# File 'lib/mongoid/attributes/dynamic.rb', line 69 def define_dynamic_writer(名称) return 除非 名称.valid_method_name? class_eval do define_method(" #{ name } = ") do |值| write_attribute(名称, 值) end end end |
# Inspect_Dynamic_fields ⇒ string
获取文档的已检查动态字段大量。
102 103 104 105 106 107 |
# File 'lib/mongoid/attributes/dynamic.rb', line 102 def Inspect_Dynamic_Fields 密钥 = 属性.密钥 - 字段.密钥 - 关系.密钥 - [ '_id', self.class.discriminator_key ] 密钥.map do |名称| " #{ name}: #{ properties[ name].inspect} " end end |
# process_attribute (name, value) ⇒对象
如果属性是动态的,请为其添加一个对象类型的字段并设置值。
87 88 89 90 91 92 93 94 |
# File 'lib/mongoid/attributes/dynamic.rb', line 87 def process_attribute(名称, 值) 响应 = respond_to?(" #{ name } = ") if 响应 发送(" #{ name } = ", 值) else write_attribute(名称, 值) end end |
# respond_to? (name, include_private = false) ⇒ true | false
覆盖 respond_to? 以便正确响应动态属性。
18 19 20 21 22 23 |
# File 'lib/mongoid/attributes/dynamic.rb', line 18 def respond_to?(名称, include_private = false) 超 || ( 属性 && 属性.has_key?(名称.to_s.Reader) ) end |