-1

我试图让用户能够通过重新点击upvote按钮来删除他的upvote

这是我的控制器

  def upvote
      if current_user.voted_up_on? @post
        @post = Post.find(params[:id])
        @currentUserLikes = PublicActivity::Activity.where(trackable_id: @post.id, owner_id: current_user.id, key: "post.like")
        @currentUserLikes.destroy_all
      else  
        @post = Post.find(params[:id])
        @post.upvote_by current_user
        @post.create_activity  :like, 
                             owner: current_user,
                             recipient: @post.user
      end
  end

  def downvote
  @post = Post.find(params[:id])
  @post.downvote_by current_user
  @post.create_activity  :dislike, 
                           owner: current_user,
                           recipient: @post.user
  end

我尝试将 if else 放在索引中,但它变得太复杂了,为什么它不起作用?注意 currentUserLike 是为了破坏用户的upvote action。 并且 upvote按钮不再起作用,我没有发布索引,因为当我没有更改控制器时我没有将其更改回来

4

2 回答 2

0

当您检查用户是否投票时,@post 似乎未设置为帖子。尝试将 @post = Post.find(params[:id]) 移到 if 语句上方。

于 2016-04-15T14:59:26.713 回答
0

试试这个:

def upvote
          @post = Post.find(params[:id])
          if current_user.voted_up_on? @post
            @currentUserLikes = PublicActivity::Activity.where(trackable_id: @post.id, owner_id: current_user.id, key: "post.like")
            @currentUserLikes.destroy_all
          else  
            @post.upvote_by current_user
            @post.create_activity  :like, 
                                 owner: current_user,
                                 recipient: @post.user
          end
      end
于 2016-04-15T15:00:44.010 回答