Skip to content

Add reference (docs) on how to delete a resource child object attribute on update #20

Open

Description

@fabiozaffani

This is due to this specific part of the code inside the update() method:

itemRef.once('value', dataSnapshot => {
  try {
    let item = dataSnapshot.val() || {};
    let fields, removed, i;
    if (resourceConfig.relations) {
      fields = resourceConfig.relationFields;
      removed = [];
      for (i = 0; i < fields.length; i++) {
        removed.push(attrs[fields[i]]);
        delete attrs[fields[i]];
      }
    }
    DSUtils.deepMixIn(item, attrs);
    if (resourceConfig.relations) {
      fields = resourceConfig.relationFields;
      for (i = 0; i < fields.length; i++) {
        let toAddBack = removed.shift();
        if (toAddBack) {
          attrs[fields[i]] = toAddBack;
        }
      }
    }
    itemRef.set(item, err => {
      if (err) {
        reject(err);
      } else {
        resolve(item);
      }
    });
  } catch (err) {
    reject(err);
}

The DSUtils.deepMixIn will try to deep merge the updated object with the existing one, so in order to be able to remove a list of objects inside a attribute child we have to set it's value to NULL, deleting it or setting it to an empty object will just cause the deepMixIn to override the updated value with the data already existing in the database.

Activity

  1. fabiozaffani commented on Jan 24, 2016

    @fabiozaffani
    Author

    Related to #22

  2. jmdobry commented on Sep 20, 2016

    @jmdobry
    Member

    This would be solved by fixing #22 right?

  3. fabiozaffani commented on Oct 19, 2016

    @fabiozaffani
    Author

    @jmdobry I think it wouldn't, the logic being applied here is to fetch the current data from firebase and merge with the new one being passed before setting it back to firebase. However, if the data was directly set in the firebase database with, for example, an attribute/property set with an empty object {}, it would delete the field at firebase, while doing the same thing here it would not work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions