销毁 acts_as_votable 上的赞成票

Destroying UpVotes on acts_as_votable

我有一个 rails 应用程序,使用 acts_as_votable 运行良好。赞按钮赞成 post 计数,然后切换到不赞按钮,而这个反对按钮赞成 post 计数。

我的问题是,自从我开始使用 Public Activity gem 以来,我找不到从提要中删除喜欢的方法。我在活动索引视图中使用了以下循环:

<% @activities.each do |activity| %>
    <p>
        <% if activity.trackable %>
            <%= link_to activity.owner.name, activity.owner %>
            <%= render_activity activity %>
        <% end %>
    </p>
<% end %>

当我删除评论时,'FOO added a comment on BAR' 的 activity 提要中的整行都消失了。但是,因为可投票 gem 的行为实际上产生了反对票而不是破坏了赞成票,所以行 'FOO liked BAR' 仍然出现,随后将是 'FOO unliked BAR'.

有人知道我如何通过 current_user 找到对特定 post 的赞成票然后销毁它吗?

下面是我的控制器代码,表示喜欢和不喜欢:

def like
  @ink.create_activity :like, owner: current_user
  @ink.upvote_by current_user

  redirect_to :back
end

def unlike
  @ink.downvote_by current_user

  redirect_to :back
end

谢谢

看起来您想要做的是在 "unliked" 时删除模特的点赞通知 - 对吗?您所要做的就是找到相关的 activity 并将其销毁。因为 Activity 和其他任何模型一样都是模型,所以您可以使用 destroy and/or destroy_all.

来执行此操作

我不太确定您的 public_activity 模型是什么样的,所以我不会给出具体示例,而是 link 您到 this post 的邮件列表中gem,显示删除 public activity 条记录的示例。

您可能还会发现通过 trackable_id 删除记录很有用 - 例如:

@activity = PublicActivity::Activity.find_by(trackable_id: (params[:id]), trackable_type: controller_path.classify)
@activity.destroy

this SO answer.

中有更多关于其工作原理的信息

对于将来偶然发现此问题的任何人,感谢 Element119,我最终能够通过一些变量和 arel 搜索查明当前用户对特定 post 的喜好。然后我销毁了精确的点赞。

def like
    @post.create_activity  :like, 
                           owner: current_user,
                           recipient: @post.user
    @post.upvote_by current_user

    redirect_to :back
  end



def unlike
    @post.downvote_by current_user

    @currentUserLikes = PublicActivity::Activity.where(trackable_id: @post.id, owner_id: current_user.id, key: "post.like")
    @currentUserLikes.destroy_all

    redirect_to :back
  end

我知道这个问题已经得到解答,但最理想和最简单的答案是使用官方 gem 方法,即 unvote_by 它适用于两种投票和反对票。