销毁 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 它适用于两种投票和反对票。
我有一个 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 它适用于两种投票和反对票。