Set up the syncing of many to many foreign keys.
@example Set up the syncing.
Person.synced(metadata)
@param [ Metadata ] metadata The relation metadata.
@since 2.1.0
# File lib/mongoid/relations/synchronization.rb, line 112 def synced(metadata) unless metadata.forced_nil_inverse? synced_save(metadata) synced_destroy(metadata) end end
Set up the sync of inverse keys that needs to happen on a destroy.
@example Set up the destroy syncing.
Person.synced_destroy(metadata)
@param [ Metadata ] metadata The relation metadata.
@return [ Class ] The class getting set up.
@since 2.2.1
# File lib/mongoid/relations/synchronization.rb, line 156 def synced_destroy(metadata) set_callback( :destroy, :after ) do |doc| doc.remove_inverse_keys(metadata) end self end
Set up the sync of inverse keys that needs to happen on a save.
If the foreign key field has changed and the document is not synced, $addToSet the new ids, $pull the ones no longer in the array from the inverse side.
@example Set up the save syncing.
Person.synced_save(metadata)
@param [ Metadata ] metadata The relation metadata.
@return [ Class ] The class getting set up.
@since 2.1.0
# File lib/mongoid/relations/synchronization.rb, line 135 def synced_save(metadata) set_callback( :save, :after, if: ->(doc){ doc.syncable?(metadata) } ) do |doc| doc.update_inverse_keys(metadata) end self end # Set up the sync of inverse keys that needs to happen on a destroy. # # @example Set up the destroy syncing. # Person.synced_destroy(metadata) # # @param [ Metadata ] metadata The relation metadata. # # @return [ Class ] The class getting set up. # # @since 2.2.1 def synced_destroy(metadata) set_callback( :destroy, :after ) do |doc| doc.remove_inverse_keys(metadata) end self end end