#primary_key_field (private)
[ GitHub ]# File 'lib/mongoid/fields/foreign_key.rb', line 171
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 49
def foreign_key? true end
true | false (readonly)
Does this field do lazy default evaluation?
# File 'lib/mongoid/fields/foreign_key.rb', line 81
def lazy? type.resizable? end
true | false (readonly)
Is the field a BSON::ObjectId?
# File 'lib/mongoid/fields/foreign_key.rb', line 107
def object_id_field? @object_id_field ||= association.polymorphic? || 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 118
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 22
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
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 155
def evaluate_default_proc(_doc) serialize_default(default_val[]) end
Evolve the object into an id compatible object.
# File 'lib/mongoid/fields/foreign_key.rb', line 61
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
Mongoize the object into the Mongo friendly value.
# File 'lib/mongoid/fields/foreign_key.rb', line 93
def mongoize(object) if type.resizable? || object_id_field? mongoize_foreign_key(object) else .mongoize(object) end end
Convert the provided object to a Mongo-friendly foreign key.
# File 'lib/mongoid/fields/foreign_key.rb', line 132
def mongoize_foreign_key(object) if [ Array, Set ].include?(type) 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 171
def primary_key_field @primary_key_field ||= association.klass.fields[association.primary_key] end
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 186
def serialize_default(object) object end