我有一个使用acts_as_votable工作正常的rails应用程序。类似按钮支持帖子计数,然后切换到一个不喜欢的按钮,这样就可以对帖子计数进行投票。
我的问题是,自从我开始使用Public Activity gem以来,我无法找到从Feed中删除喜欢的方法。我在活动索引视图中使用了以下循环:
<% @activities.each do |activity| %>
<p>
<% if activity.trackable %>
<%= link_to activity.owner.name, activity.owner %>
<%= render_activity activity %>
<% end %>
</p>
<% end %>
当我删除评论时,&f; FOO的活动Feed中的整行都添加了关于BAR&#39;消失。然而,因为作为可投票宝石的行为实际上创造了一个downvote而不是破坏了upvote,所以线条&#39; FOO喜欢BAR&#39;仍然会出现,随后会被“FOO unliked BAR&#39;”跟随。
有人知道我如何通过特定帖子上的current_user找到upvote,然后将其销毁?
下面是我喜欢的控制器代码,不像现在这样:
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
由于
答案 0 :(得分:4)
我知道这已经得到了解答,但理想和最简单的答案是使用官方宝石方法 unvote_by 它适用于upvotes和downvotes。
答案 1 :(得分:2)
看起来你想要做的就是删除模型,就像通知“不喜欢” - 这是正确的吗?您所要做的就是找到相关活动并销毁它。由于活动是与其他活动一样的模型,因此您可以使用destroy
和/或destroy_all
执行此操作。
我不太确定你的public_activity模型是什么样的,所以我没有给出具体的例子,而是将你链接到gem的邮件列表上的this post,其中显示了删除公共活动记录的示例
您可能还会发现通过trackable_id
删除记录很有用 - 例如:
@activity = PublicActivity::Activity.find_by(trackable_id: (params[:id]), trackable_type: controller_path.classify)
@activity.destroy
有关{* 3}}的工作原理的更多信息。
答案 2 :(得分:2)
对于任何偶尔会遇到这种情况的人,多亏了Element119,我最终能够通过一些变量和搜索来确定当前用户喜欢的特定帖子。然后我摧毁了精确定位的喜欢。
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