2016-08-10 3 views
0

То, что я пытаюсь выполнить:Обновление других объектов в облаке кода из одной таблицы parse.com

  • Пользователь может сохранить места в таблицу и поместить их на активный/неактивный.

Таблица Расположение:

  • пользователь (указатель на пользователя)
  • место (геоданных)
  • активен (BOOL)

Сценарий-х:

  • Пользователь сохраняет новое местоположение он автоматически устанавливает это положение в активным. Все должны быть настроены на неактивные.
  • Пользователь устанавливает сохраненное местоположение в активное, автоматически все остальные местоположения должно быть установлено как неактивное.

Таким образом, в конце таблицы местоположения пользователь может иметь много местоположений, но только одно может быть активным одновременно. Я думал, что это прекрасная вещь для cloudcode

Я положил это в cloudcode, как BeforeSave:

Parse.Cloud.beforeSave("Location", function(request, response) { 
    var query = new Parse.Query("Location"); 
    query.equalTo("user", request.object.get("user")); 
    query.equalTo("active", true); 
    query.find({ 
    success: function(results) { 
     //get all objects in the table and set the active property to false 
     for (var i = 0; i < results.length; i++) { 
      var object = results[i]; 
      object.set('active',false); 
      object.save(); 
     } 
     response.success(); 
    }, 
    error: function(error) { 
     response.error(error.message); 
    } 
    }); 
} 
}); 

Угадайте, что происходит ... Все объекты устанавливаются в ложь, и я думаю, что я знаю, почему ... потому что, когда вы сохраняете объект в cloudcode, он вызовет облако синтаксиса, прежде чем снова сохранить крюк?

Есть ли что-то, что я могу сделать по этому поводу или это моя логика, просто неправильно?

+0

@ cricket_007 typo :) – MichaelAngelo

+0

Хорошо, так что это не работает? Вы отправляете Активное местоположение? Если нет, вы можете установить временную метку и использовать функцию после сохранения, чтобы установить последнее место на активный –

+0

@ cricket_007 хм, я действительно не понимаю, что вы говорите .. потому что вы все равно будете в петле справа – MichaelAngelo

ответ

1

Я предлагаю это решение:

Parse.Cloud.beforeSave("Location", function(request, response) { 

    var location = request.object; 
    if (location.get("active")){ 
     var query = new Parse.Query("Location"); 
     query.equalTo("user", request.object.get("user")); 
     query.equalTo("active", true); 

     query.first().then(function(result){ 
       results.set('active',false); 
       results.save() 
      .then(function(){ 
       response.success(); 
      }); 
     },function (error) { 
      response.error(error.message); 
     }); 
    } else { 
     response.success(); 
    } 
}); 

Так что, когда вы сохраняете «неактивный» местоположение ответ BeforeSave ОК. Если вы сохраните новое активное местоположение, он сначала проверит только активный локатор (query.first) и настроит его на неактивное (таким образом, это будет выполнено до того, как будет выполненоSave), а затем вы сохраните новое активное местоположение.

Смежные вопросы