【问题标题】:Destroying UpVotes on acts_as_votable销毁 act_as_votable 上的 UpVotes
【发布时间】:2015-03-11 22:05:28
【问题描述】:

我有一个使用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

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby rubygems public-activity


    【解决方案1】:

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

    【讨论】:

      【解决方案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
      

      this SO answer 中提供了有关其工作原理的更多信息。

      【讨论】:

      • 我给了你赏金,因为你给我指明了正确的方向!我仍然需要进行大量挖掘,但我最终设法对其进行了分类!非常感谢您花时间回答这个问题。我将发布这个难题的最终解决方案,作为将来帮助任何人的答案!
      【解决方案3】:

      对于将来偶然发现此问题的任何人,多亏了 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 2012-02-18
        • 1970-01-01
        • 2020-06-17
        • 2014-12-02
        • 1970-01-01
        相关资源
        最近更新 更多