Добавить элемент в массив выбранных элементов Parse Cloud Code

  • Javascript
  • Parse Cloud Code

В моем приложении User можете запросить присоединение к другому Users учетная запись. Псевдокод для этого выглядит следующим образом:

  1. отправить вверх username аккаунта, к которому мы хотим присоединиться
  2. поиск, чтобы увидеть, если username существуют в базе данных
  3. если no вернуть
  4. если yes создать новый AccountRequest объект
  5. добавить вновь созданный AccountRequest объект для пользователя, которого мы искали.

Я могу сделать шаги 1-4, но у меня возникают проблемы при выполнении #5.

Вот мой код, с которым я работаю.

Parse.Cloud.define("sendAccountAdditionRequest", function(request, response) {

  console.log("-sendAccountAdditionRequest");

  // Create the query on the User class
  var query = new Parse.Query(Parse.User);

  // Set our parameters to search on
  query.equalTo("username", request.params.adminUsername);

  // Perform search
  query.find({

    // We found a matching user
    success: function(results) {

        Parse.Cloud.useMasterKey();

        var fetchedUser = results[0]

        console.log("--found user");
        console.log("--creating new AccountRequest");

        // Create a new instance of AccountRequest
        var AccountRequestClass = Parse.Object.extend("AccountRequest");
        var accountRequest = new AccountRequestClass();

        // Set the User it is related to. Our User class has a 1..n relationship to AccountRequest
        accountRequest.set("user", fetchedUser);

        // Set out other values for the AccountRequest
        accountRequest.set("phone", request.params.adminUsername);
        accountRequest.set("dateSent", Date.now());

        // Save the new AccountRequest
        accountRequest.save(null,{

            // Once the new AccountRequest has been saved we need to add it to our fetched User
            success:function(savedRequest) { 

                console.log("---adding AccountRequest to fetched User");

                //
                // === This is where stuff breaks
                //

                var requestRelation = fetchedUser.relation("accountRequest");

                // Now we need to add the new AccountRequest to the fetched User. The accountRequest property for a User is array...I'm not sure how I'm suppose to append a new item to that. I think I need to somehow cast results[0] to a User object? Maybe? 
                requestRelation.add(savedRequest);

                // We perform a save on the User now that the accountRequest has been added.
                fetchedUser.save(null, {

                    success:function(response) { 
                        console.log("----AccountRequest complete");
                        response.success("A request has been sent!");
                    },

                    error:function(error) {
                        // This is printing out: ParseUser { _objCount: 2, className: '_User', id: 'QjhQxWCFWs' }
                        console.log(error);
                        response.error(error);
                    }
                });


                //
                // ================================
                //


                //response.success("A request has been sent!");
            },

            // There was an error saving the new AccountRequest
            error:function(error) {
                response.error(error);
            }
        });
    },

    // We were not able to find an account with the supplied username
    error: function() {
      response.error("An account with that number does not exist. Please tell your administrator to sign up before you are added.");
    }
  });
});

Я считаю, что моя проблема заключается в получении accountRequest отношение из возвращенных результатов поиска из исходного запроса. Следует также отметить, что я не создал accountRequest собственность моего PFUserНасколько я понимаю, это будет автоматически выполнено Parse, когда я выполню save функция.

1 ответ

Решение

Будет ли создан accountRequest для вас, зависит от того, установлены ли разрешения уровня класса, чтобы клиентское приложение могло добавлять поля. Вероятно, для вашего Parse.User установлено значение NO.

Но отношение в Parse.User все равно не нужно, так как вы уже установили его в классе AccountRequest. Для данного пользователя вы можете получить его accountRequests с помощью:

PFQuery *query = [PFQuery queryWithClassName:@"AccountRequest"];
[query whereKey:@"user" equalTo:aUser];
query.find()...

Это эквивалентно получению отношения к пользователю, получению его запроса и его выполнению.

Пара замечаний о вашем коде: (а) findOne сэкономит вам строку, когда вы знаете, что есть только один результат, (б) с помощью Parse.Promise было бы действительно привести в порядок вещи.

Другие вопросы по тегам