如何使用Cloud Code和Parse.com保存对象关系?

时间:2013-04-25 19:58:49

标签: parse-platform

保存对象后,我想创建一个与第一个对象有关系的私有对象。我很好奇我是否应该使用.afterSave方法,或者第一个对象保存的成功回调中的内容。

如果我应该在afterSave方法中执行它,我不确定如何在不访问调试器的情况下获取对象的引用 - 我假设 request.object是刚刚保存的对象?毋庸置疑,此代码无效。它创建和保存两个对象,而不是两者之间的关系。

有什么想法吗?非常感谢。

Parse.Cloud.beforeSave("Subscription", function(request, response) {
 if (request.object.isNew()){
    request.object.set("url", Math.random().toString(36).substring(7));
    request.object.set("active", true);
    response.success();
 }
 else{
     response.error("Couldn't save Subscription for some reason. Sorry");
 }
});

Parse.Cloud.afterSave("Subscription", function(request,response){
//Add SubscriptionLog object to Subscription

var SubscriptionLog = Parse.Object.extend("SubscriptionLog");
var subscriptionLog = new SubscriptionLog();

subscriptionLog.save(null, {
    success: function(savedSL){
        //create relation of subscriptionLog to subscription
        var relation = request.object.relation("subscriptionLog");
        relation.add(subscriptionLog);
        relation.save();
    },
    error: function(error){
        console.log(error);
    }
  });
})

2 个答案:

答案 0 :(得分:1)

我相信,由于您似乎每个SubscriptionLog只有一个订阅,因此您只需要在SubscriptionLog中使用对象指针,而不是关系。只需将objectID分配给指针即可。

在beforeSave执行response.success()之前,Subscription没有objectID。所以至少,你需要在response.success()之后这样做。但是,我从未检查过beforeSave中是否有objectID,但是在调用之后。我在afterSave函数中进行赋值。

答案 1 :(得分:0)

你应该使用afterSave钩子。刚刚保存的对象是request.object

您的afterSave挂钩格式错误 - 没有“响应”对象。正确的格式是:

Parse.Cloud.afterSave("Subscription", function(request) {
  // ...
});