我想检查一下,我没有为事件的参与状态保存重复条目 - 所以在BeforeSave上我检查事件rsvp尚未输入 - 如果有,我想知道它是否需要要被更新。如果是,我想进行更新而不是创建新的RSVP条目。
这是我的代码 - 即使在BeforeSave中进行简单更新,我也似乎无法使用它。
Parse.Cloud.beforeSave("Rsvps", function(request, response) {
var eventid = request.object.get("eventid");
var userid = request.object.get("userid");
var rsvp_status = request.object.get("rsvp_status");
var Rsvps = Parse.Object.extend("Rsvps");
var query = new Parse.Query(Rsvps);
query.equalTo("eventid", eventid);
query.equalTo("userid", userid);
query.first({
success: function(object) {
if (object) {
// response.error("An RSVP for this event already exists.");
request.object.id = object.id;
request.object.set('rsvp_status', "attending");
request.object.save();
} else {
response.success();
}
},
error: function(error) {
response.error("Error: " + error.code + " " + error.message);
}
});
});
我已经尝试了很多变化而没有任何喜悦 - 这是我最近的尝试。
答案 0 :(得分:2)
@CityLogic你不应该在@ ahoffer的例子中调用第二次保存,因为你在beforeSave触发器中。只需设置resp_status并调用response.success()。
答案 1 :(得分:0)
更新。我添加了一个检查,如果“参加”值正确,则不要更新现有对象。试一试。如果有任何无法解决的问题,请将错误添加为此答案的注释。
Parse.Cloud.beforeSave("Rsvps", function (request, response) {
var eventid = request.object.get("eventid");
var userid = request.object.get("userid");
var rsvp_status = request.object.get("rsvp_status");
//Do not re-declare the class
//var Rsvps = Parse.Object.extend("Rsvps");
var query = new Parse.Query("Rsvps");
//Check for existing RSVP
query.equalTo("eventid", eventid);
query.equalTo("userid", userid);
query.first().then(function (object) {
if (object && object.get('rsvp_status') != "attending") {
//RSVP exists and needs updating.
// Do not save the object attached to the request.
//Instead, update existing object.
object.set('rsvp_status', "attending");
object.save().then(function () {
response.error('Updated existing RSVP to "attending"');
},
function (error) {
response.error("Error: " + error.code + " " + error.message);
});
} else {
//Continuing and save the new RSVP object because it is not a duplicate.
response.success();
}
},
function (error) {
response.error("Error: " + error.code + " " + error.message);
});
});