4

我有一个使用acts_as_votable 运行良好的rails 应用程序。点赞按钮会增加帖子计数,然后切换到不喜欢按钮,这会降低帖子计数。

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

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

当我删除评论时,“FOO 在 BAR 上添加评论”的活动提要中的整行都消失了。然而,由于作为可投票的 gem 的行为实际上会产生一个反对票而不是破坏赞成票,所以“FOO 喜欢 BAR”这一行仍然出现,随后会出现“FOO 不喜欢 BAR”。

有谁知道我如何在特定帖子上找到 current_user 的赞成票然后将其销毁?

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

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

谢谢

4

3 回答 3

4

我知道这已经得到解答,但理想和最简单的答案是使用官方 gem 方法,它是unvote_by,它适用于赞成票和反对票。

于 2016-04-15T16:07:12.610 回答
2

看起来您想要做的是在模型“不喜欢”时删除模型的点赞通知 - 对吗?您所要做的就是找到相关的活动并将其销毁。因为活动和任何其他活动一样都是模型,所以您可以使用destroy和/或来做到这一点destroy_all

我不太确定您的 public_activity 模型是什么样的,所以我不会给出具体示例,而是将您链接到gem 邮件列表上的这篇文章,其中显示了删除公共活动记录的示例。

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

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

在这个 SO answer中有更多关于它是如何工作的信息。

于 2015-03-24T23:40:07.000 回答
2

对于将来偶然发现这一点的任何人,多亏了 Element119,我最终能够通过一些变量和 arel 搜索来确定当前用户在特定帖子上的喜好。然后我破坏了精确的喜欢。

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
于 2015-03-25T13:43:55.397 回答