解析云代码无法添加关系

时间:2014-07-31 08:48:00

标签: parse-platform cloud add relation

我正在学习Parse,有点困在一个与向关系列添加对象相关的bug(两个相关的类)。以下是代码。基本上我的组织类通过名为admins的关系字段与用户类相关联。一个组织可以有很多管理员。 它可能没有优化我正在做的,所以请指导我。我首先检查管理员和组织的传递objectId的存在。此功能不适用于一般用户,因此我可以传递objectId。我不清楚这里有什么问题,但是如果我在添加之前和之后打印关系对象的内容,则className的值在调用之后为null。请告知我缺少什么或如何改进代码并修复它:)。 顺便说一下,我已经尝试了几天发布的许多解决方案,但到目前为止还没有任何帮助,因此发布了新的问题。  非常感谢。

Parse.Cloud.define("addAdminToOrganization", function(request, response)
{
    var queryAdmin = new Parse.Query("Users");
    var reqOrgId = request.params.organizationId;
    var reqAdminId = request.params.adminId;
    queryAdmin.equalTo("objectId", reqAdminId);
    queryAdmin.find( 
    {
        success: function(fetchedAdmin)
        {
            var reqOrgId = request.params.organizationId;
            var queryOrg = new Parse.Query("Organizations");
            queryOrg.equalTo("objectId",reqOrgId);
            var fetchedAdm = fetchedAdmin;
            queryOrg.get(reqOrgId, 
            {
                success: function(fetchOrg)
                {
                    var _fetchOrg = fetchOrg;
                    var adminRelation = fetchOrg.relation("admins");
                    Parse.Cloud.useMasterKey();
                    var reqAdmin = request.params.adminId;
                    adminRelation.add(reqAdmin);
                    _fetchOrg.save(null,
                    {
                        success:function() {
                            console.log("Admin added to Organization");
                            response.success("Admin:" + reqAdminID + " added to Organization:"+reqOrgId);
                            },
                        error:function(err) {
                            console.log("Error while adding admin to Organization, "+ err.message);
                            response.error("Unable to add Admin");
                            }
                    } );

                },
                 error: function(err){
                    console.log("Organization not found : " + err.code);
                    response.error("Organization not found.");
                    }
            });
        },
        error:function(err){
            console.log("Admin not found: " + err.code);
            response.error("Admin not found");
            }
    });
});

1 个答案:

答案 0 :(得分:4)

您的代码存在以下几个问题:

queryAdmin.equalTo("objectId", reqAdminId);
queryAdmin.find( 
{
    success: function(fetchedAdmin)
    {

因为你做了find() fetchedAdmin变量将是一个包含0个或更多元素的数组,如果你知道你只想要一个记录丢弃equalTo()并且只是使用get()

奇怪的是,您似乎并未实际使用fetchedAdmin或将其复制到的变量fetchedAdm

queryOrg.equalTo("objectId",reqOrgId);
queryOrg.get(reqOrgId, 

equalTo()调用是多余的,因为您已正确使用get()进行此查询。

var reqAdmin = request.params.adminId;
adminRelation.add(reqAdmin);

在这里,您正在读取字符串ID并尝试将其添加到关系中,您需要创建指针,或者使用您检索到的管理对象(如果您确实已经正确使用了该对象)。

您的代码的简化如下:

Parse.Cloud.define("addAdminToOrganization", function(request, response)
{
    Parse.Cloud.useMasterKey();
    var reqOrgId = request.params.organizationId;
    var reqAdminId = request.params.adminId;

    var queryAdmin = new Parse.Query("Users");
    queryAdmin.get(reqAdminId, 
    {
        success: function(fetchedAdmin)
        {
            var queryOrg = new Parse.Query("Organizations");
            queryOrg.get(reqOrgId, 
            {
                success: function(fetchedOrg)
                {
                    var adminRelation = fetchedOrg.relation("admins");
                    adminRelation.add(fetchedAdmin);
                    fetchedOrg.save(null,
                    {
                        success:function() {
                            console.log("Admin added to Organization");
                            response.success("Admin:" + reqAdminID + " added to Organization:"+reqOrgId);
                            },
                        error:function(err) {
                            console.log("Error while adding admin to Organization, "+ err.message);
                            response.error("Unable to add Admin");
                            }
                    } );

                },
                 error: function(err){
                    console.log("Organization not found : " + err.code);
                    response.error("Organization not found.");
                    }
            });
        },
        error:function(err){
            console.log("Admin not found: " + err.code);
            response.error("Admin not found");
            }
    });
});