Добавить элемент в массив выбранных элементов Parse Cloud Code
- Javascript
- Parse Cloud Code
В моем приложении User
можете запросить присоединение к другому Users
учетная запись. Псевдокод для этого выглядит следующим образом:
- отправить вверх
username
аккаунта, к которому мы хотим присоединиться - поиск, чтобы увидеть, если
username
существуют в базе данных - если
no
вернуть - если
yes
создать новыйAccountRequest
объект - добавить вновь созданный
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
было бы действительно привести в порядок вещи.