google-app-maker

Updating relations using script overwrites relations for all but newest record


I have a Styles (Garments) model and an Images model and a one to many Styles<=Images relationship.

I have a Cloudinary jQuery widget to upload images and then I am trying to update the Images relationship with the URL to the images. The intention is then to display these images in a table.

However, when I update the relation using my code, it only saves the newest StyleCode against the relation.

So if I save one image, then another one, the Image table goes from this:

Image URL         Style
http://abc        1234

to this

Image URL         Style
http://abc        <blank>
http://xyz        1234  

My first question is, how does the relation actually work? It seems it relies on my StyleCode to keep the record relation. I would've thought it would've been _key.....????

Secondly, is there anything you can spot in my code which might be overwriting the previous StyleCode?

Server side code

function saveImageToStyle(images, styleCode) {
  var imgs = [];
  images.forEach(function(image)
  {
    var imageRecord = app.models.Images.newRecord();
    imageRecord.ThumbnailURL = image.thumbnail_url;
    imageRecord.ImageURL = image.url;
    imageRecord.Path = image.path;
    imageRecord.ImageName = image.original_filename;
    imgs.push(imageRecord);
  }); 
  app.saveRecords(imgs);
  var query = app.models.Styles.newQuery();
  query.filters.StyleCode._equals = styleCode; // is it this???
  var styleRecord = query.run()[0];
  styleRecord.Images = imgs;
  app.saveRecords([styleRecord]);
}

Client side code

function saveStyleImages(images) {
  var styleCode = app.datasources.Styles.item.StyleCode; // is there a better way to get the current StyleCode?
  var status = app.pages.StyleEdit.descendants.Status; 
  google.script.run
  .withFailureHandler(function(error) {
    status.text = error.message;
  })
  .withSuccessHandler(function(result) {
    status.text = images + "success";
  })
  .saveImageToStyle(images, styleCode);
}

Solution

  • The following line replaces all existing style associations:
    styleRecord.Images = imgs;

    You can replace it with:
    styleRecord.Images = styleRecord.Images.concat(imgs);