#primary_key_field (private)
[ GitHub ]# File 'lib/mongoid/fields/foreign_key.rb', line 174
def primary_key_field @primary_key_field ||= association.klass.fields[association.primary_key] end
123456789_123456789_123456789_123456789_123456789_
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Standard ,
Forwardable
|
|
Instance Chain:
self,
Standard
|
|
Inherits: |
Mongoid::Fields::Standard
|
Defined in: | lib/mongoid/fields/foreign_key.rb |
Represents a ::BSON
document field definition which stores a foreign key that references the ID of another document. Used for association behavior.
Is this field a foreign key?
Does this field do lazy default evaluation?
Is the field a BSON::ObjectId?
Returns true if an array, false if not.
Standard
- Inherited#default_val | Defines the behavior for defined fields in the document. |
#foreign_key? | Is this field a foreign key? |
#label | Defines the behavior for defined fields in the document. |
#lazy? | Does this field do lazy default evaluation? |
#localize_present? | Is the localized field enforcing values to be present? |
#localized? | Is the field localized or not? |
#name | Defines the behavior for defined fields in the document. |
#object_id_field? | Is the field a BSON::ObjectId? |
#options | Defines the behavior for defined fields in the document. |
#pre_processed? | Does the field pre-process its default value? |
Adds the atomic changes for this type of resizable field.
Evolve the object into an id compatible object.
Mongoize the object into the Mongo friendly value.
Evaluate the default proc.
Convert the provided object to a Mongo-friendly foreign key.
Get the id field of the association.
This is used when default values need to be serialized.
Standard
- Inherited#add_atomic_changes | Adds the atomic changes for this type of resizable field. |
#association | Get the metadata for the field if its a foreign key. |
#eval_default | Evaluate the default value and return it. |
#type | Get the type of this field - inferred from the class name. |
#default_name | Get the name of the default method for this field. |
#define_default_method | Define the method for getting the default on the document. |
#evaluate_default_proc | Evaluate the default proc. |
#evaluated_default | Get the evaluated default. |
#included? | Is the field included in the fields that were returned from the database? We can apply the default if: |
#serialize_default | This is used when default values need to be serialized. |
This class inherits a constructor from Mongoid::Fields::Standard
true
| false
(readonly)
Is this field a foreign key?
# File 'lib/mongoid/fields/foreign_key.rb', line 52
def foreign_key? true end
true
| false
(readonly)
Does this field do lazy default evaluation?
# File 'lib/mongoid/fields/foreign_key.rb', line 84
def lazy? type.resizable? end
true
| false
(readonly)
Is the field a BSON::ObjectId?
# File 'lib/mongoid/fields/foreign_key.rb', line 110
def object_id_field? @object_id_field ||= association.polymorphic? ? true : association.klass.using_object_ids? end
true
| false
(readonly)
Returns true if an array, false if not.
# File 'lib/mongoid/fields/foreign_key.rb', line 121
def resizable? type.resizable? end
Adds the atomic changes for this type of resizable field.
@todo: Refactor, big time.
# File 'lib/mongoid/fields/foreign_key.rb', line 25
def add_atomic_changes(document, name, key, mods, new_elements, old_elements) old = (old_elements || []) new = (new_elements || []) if new.length > old.length if new.first(old.length) == old document.atomic_array_add_to_sets[key] = new.drop(old.length) else mods[key] = document.attributes[name] end elsif new.length < old.length pulls = old - new if new == old - pulls document.atomic_array_pulls[key] = pulls else mods[key] = document.attributes[name] end elsif new != old mods[key] = document.attributes[name] end end
Object
(private)
Evaluate the default proc. In some cases we need to instance exec, in others we don’t.
# File 'lib/mongoid/fields/foreign_key.rb', line 158
def evaluate_default_proc(doc) serialize_default(default_val[]) end
Object
Evolve the object into an id compatible object.
# File 'lib/mongoid/fields/foreign_key.rb', line 64
def evolve(object) if object_id_field? || object.is_a?(Document) if association.polymorphic? association.convert_to_foreign_key(object) elsif object.is_a?(Document) && object.respond_to?(association.primary_key) primary_key_field.evolve(object.send(association.primary_key)) else object.__evolve_object_id__ end else .evolve(object) end end
Object
Mongoize the object into the Mongo friendly value.
# File 'lib/mongoid/fields/foreign_key.rb', line 96
def mongoize(object) if type.resizable? || object_id_field? mongoize_foreign_key(object) else .mongoize(object) end end
Object
(private)
Convert the provided object to a Mongo-friendly foreign key.
# File 'lib/mongoid/fields/foreign_key.rb', line 135
def mongoize_foreign_key(object) if type == Array || type == Set object = object.to_a if type == Set || object.is_a?(Set) if object.resizable? object.blank? ? object : association.convert_to_foreign_key(object) else object.blank? ? [] : association.convert_to_foreign_key(Array(object)) end elsif !(object.nil? || object == '') association.convert_to_foreign_key(object) end end
# File 'lib/mongoid/fields/foreign_key.rb', line 174
def primary_key_field @primary_key_field ||= association.klass.fields[association.primary_key] end
Object
(private)
This is used when default values need to be serialized. Most of the time just return the object.
# File 'lib/mongoid/fields/foreign_key.rb', line 189
def serialize_default(object); object; end