我在https://www.railstutorial.org/book/following_users指南后的rails / angular app中创建了一个关注/取消关注功能。但是,当我想取消关注朋友时,该方法会删除用户的ID。
我的模板中的removeFollower函数
%ul{"ng-repeat" => "follower in followers"}
%li
{{ follower.name }}
%a{"ng-click" => "removeFollower(follower)"} Remove
我的控制器中的removeFollower函数,
$scope.removeFollower = function(follower){
console.log (follower)
console.log (follower.name)
removeFollower.removeFollower(follower).then(function(){
},function(){
}).then(init);
Notification.success(follower.name + ' is verwijderd als vriend.');
}
还有removeFollower服务,
app.factory('removeFollower', ['$http', function($http) {
return {
removeFollower: function(follower) {
var follower_id = parseInt(follower.id);
var follower_name = (follower.name)
console.log (follower_id)
return $http.delete('/relationships/'+follower_id + '.json');
}
};
}])
我的relationship_controller中的destroy方法,
def destroy
@user = Relationship.find(params[:id]).followed
current_user.unfollow(@user)
redirect_to root_url
end
因此,当我取消关注用户时,该方法会删除错误的对象(我认为)。
ActiveRecord :: RecordNotFound(无法找到与'id'= 3的关系): app / controllers / relationships_controller.rb:13:在`destroy'
这里的id是我试图取消关注的用户的用户ID,我认为它应该是记录的id。
答案 0 :(得分:1)
您正在向follower_id
请求delete
发送$http.delete('/relationships/'+follower_id + '.json');
,因此您有两种选择之一。
您的@user
不应该是Relationship
的实例,而是User
模型的实例
def destroy
@user = User.find(params[:id])
current_user.unfollow(@user)
redirect_to root_url
end
您的unfollow(user)
方法应该销毁Relationship
Relationship.where(follower_id: self.id, followed_id: user.id).destroy
个实例
或直接将follower
id发送给控制器并将destroy方法更改为:
def destroy
current_user.relationships.where(follower_id: params[:id]).destroy_all
redirect_to root_url
end