I'm trying to use ember-data within my app to manage follower/following relations. I'm having an issue where if the user hits the toggle on/off ember throws "Attempted to handle event deleteRecord
on while in state root.deleted.saved." Any one run into this before?
Action code below
actions: {
follow: function(model){
var component = this;
var store = this.get('targetObject.store');
var session = this.get('targetObject.session');
this.set('isFollowed', true)
/* Follower Side */
Ember.RSVP.hash({
profile: store.find('profile', model),
follower: session.get('currentUser.profile')
}).then(function(rsvp){
var follower = store.createRecord('follower', {
profile: rsvp.profile,
follower: rsvp.follower,
status: 'approved'
});
var followed = store.createRecord('followed', {
profile: rsvp.follower,
followed: rsvp.profile,
status: 'approved'
});
followed.save().then(function(savedFollowed){
rsvp.follower.get('followeds').addObject(savedFollowed);
});
follower.save().then(function(savedFollower){
rsvp.profile.get('followers').addObject(savedFollower);
});
})
},
unfollow: function(model){
var component = this;
var store = this.get('targetObject.store');
var session = this.get('targetObject.session');
this.set('isFollowed', false)
/* Remove Follower Side */
component.set('isFollowed', false)
Ember.RSVP.hash({
profile: store.find('profile', model),
follower: session.get('currentUser.profile')
}).then(function(rsvp){
/* Delete Follower Side */
var follower_id = rsvp.follower.get('id');
rsvp.profile.get('followers').forEach(function(item){
if(follower_id == item.get('followLink')){
item.destroyRecord();
}
})
var profile_id = rsvp.profile.get('id');
rsvp.follower.get('followeds').forEach(function(item){
if(profile_id == item.get('followLink')){
item.destroyRecord();
}
})
})
}
}
UPDATE
I resolved the issue - thank you GJK for the response. For those who run into this issue - because I was adding the record to the parent models "hasMany" relation manually using "addObject" - when I deleted the record, I also needed to remove it from that relation so that it didn't exist in the parents "hasMany" and this come up in the delete loop again. Long story short the solution was to add 'removeObject(item)' i.e...
item.destroyRecord();
rsvp.follower.get('followeds').removeObject(item);
item.destroyRecord();
rsvp.profile.get('followeds').removeObject(item)
root.deleted.saved
means that your model has already been deleted, and the change has been persisted to the server. My guess would be that followers
and followeds
are sets of users that are not necessarily disjoint.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With