取消追随功能可以摧毁什么?

时间:2016-01-02 22:58:49

标签: ruby-on-rails

我在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。

1 个答案:

答案 0 :(得分:1)

您正在向follower_id请求delete发送$http.delete('/relationships/'+follower_id + '.json');,因此您有两种选择之一。

  1. 您的@user不应该是Relationship的实例,而是User模型的实例

     def destroy
       @user = User.find(params[:id])
       current_user.unfollow(@user)
       redirect_to root_url
     end
    
  2. 您的unfollow(user)方法应该销毁Relationship

    Relationship.where(follower_id: self.id, followed_id: user.id).destroy个实例
    1. 或直接将follower id发送给控制器并将destroy方法更改为:

       def destroy
         current_user.relationships.where(follower_id: params[:id]).destroy_all
         redirect_to root_url
       end