类:Mongoid::Fields::ForeignKey

继承:
标准分析器 显示全部
定义于:
lib/mongoid/fields/foreign_key.rb

Overview

表示BSON文档字段定义,其中存储引用另一个文档ID的外键。 用于关联行为。

实例属性摘要

Standard继承的属性

#default_val#label#name#options

实例方法摘要折叠

Standard继承的方法

#association#eval_default#initialize 、 #localize_present ? , #localized? , #pre_processed? , #type

构造函数详情

该类从Mongoid::Fields::Standard继承了一个构造函数

实例方法详细信息

# add_atomic_changes (文档, name, key, mods, new_elements, old_elements) ⇒对象

为此类可调整大小的字段添加原子更改。

@todo:重构,意义重大。

例子:

添加原子更改。

field.add_atomic_changes(doc, "key", {}, [], [])

参数:

  • 文档 (文档)

    要添加到的文档。

  • 名称 ( string )

    字段的名称。

  • key ( string )

    字段的原子位置。

  • mods (哈希)

    当前的修改。

  • new_elements ( Array )

    要添加的新元素。

  • old_elements ( Array )

    旧元素被删除。



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/mongoid/fields/foreign_key.rb', line 25

def add_atomic_changes(文档, 名称, key, mods, new_elements, old_elements)
   = (old_elements || [])
  new = (new_elements || [])
  if new.长度 > .长度
    if new.first(.长度) == 
      文档.atomic_array_add_to_sets[key] = new.删除(.长度)
    else
      mods[key] = 文档.属性[名称]
    end
  elsif new.长度 < .长度
    pull =  - new
    if new ==  - pull
      文档.atomic_array_pulls[key] = pull
    else
      mods[key] = 文档.属性[名称]
    end
  elsif new != 
    mods[key] = 文档.属性[名称]
  end
end

# describe (对象) ⇒对象

将对象演进为ID兼容对象。

例子:

演进对象。

field.evolve(object)

参数:

  • 对象 ( Object )

    要进化的对象。

返回:

  • ( Object )

    进化后的对象。



64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/mongoid/fields/foreign_key.rb', line 64

def 发展(对象)
  if object_id_field? || 对象.is_a?(文档)
    if 关联.多态?
      关联.convert_to_foreign_key(对象)
    elsif 对象.is_a?(文档) && 对象.respond_to?(关联.primary_key)
      Primary_key_field.发展(对象.发送(关联.primary_key))
    else
      对象.__evolve_object_id__
    end
  else
    related_id_field.发展(对象)
  end
end

# foreign_key?true | false

该字段是外键吗?

例子:

该字段是外键吗?

field.foreign_key?

返回:

  • ( true | false )

    如果字段是外键。



52
53
54
# File 'lib/mongoid/fields/foreign_key.rb', line 52

def foreign_key?
  true
end

#惰性?true | false

该字段是否执行延迟默认评估?

例子:

该字段是否为惰性字段?

field.lazy?

返回:

  • ( true | false )

    如果字段为惰性字段。



84
85
86
# File 'lib/mongoid/fields/foreign_key.rb', line 84

def 懒?
  类型.可调整大小?
end

# mongoize (对象) ⇒对象

将对象 Mongoize 为mongo友好值。

例子:

将对象 Mongoize。

field.mongoize(object)

参数:

  • 对象 ( Object )

    要 Mongoize 的对象。

返回:

  • ( Object )

    mongoized对象。



96
97
98
99
100
101
102
# File 'lib/mongoid/fields/foreign_key.rb', line 96

def mongoize(对象)
  if 类型.可调整大小? || object_id_field?
    mongoize_foreign_key(对象)
  else
    related_id_field.mongoize(对象)
  end
end

# object_id_field?true | false

该字段是 BSON::ObjectId 吗?

例子:

该字段是 BSON::ObjectId 吗?

field.object_id_field?

返回:

  • ( true | false )

    如果字段是BSON::ObjectId。



110
111
112
113
# File 'lib/mongoid/fields/foreign_key.rb', line 110

def object_id_field?
  @object_id_field ||=
      关联.多态? ? true : 关联.klass.using_object_id?
end

#可调整大小?true | false

如果是大量,则返回 true,否则返回 false。

例子:

字段大小是否可调整?

field.resizable?

返回:

  • ( true | false )

    如果字段可调整大小。



121
122
123
# File 'lib/mongoid/fields/foreign_key.rb', line 121

def 可调整大小?
  类型.可调整大小?
end