1

我正在创建一个 Rails 4 应用程序,用户可以在其中通过acts_as_votable gem 对给定的帖子进行投票。假设作为用户,我按下 upvote 按钮,如果我再次按下 SAME 按钮,我将如何做到这一点,投票被取消,所以本质上是“unupvote”?

这是我的 postvote 方法在我的帖子控制器中的样子:

def upvote
  @post = Post.find(params[:id])
  @post.upvote_by current_user
  redirect_to :back
end

我的帖子模型

class Post < ActiveRecord::Base
  acts_as_votable
  belongs_to :user
end

最后这就是我在视图中呈现按钮的方式

<div class="btn-group">
  <%= link_to like_post_path(post), method: :put, class: "btn btn-default btn-sm" do %>
    <span class="glyphicon glyphicon-chevron-up"></span>
    Upvote
    <%= post.get_upvotes.size %>
  <% end %>
</div>

谢谢你们的帮助!

4

1 回答 1

1

act_as_votable有一个unvote_up可以使用的方法。我会做这样的事情(假设你like_post_path引用了这个upvote动作):

def upvote
  @post = Post.find(params[:id])

  if current_user.up_votes @post 
    @post.unvote_up current_user
  else
    @post.upvote_by current_user
  end

  @post.create_activity :upvote, owner: current_user
  redirect_to :back
end

您还需要添加acts_as_voter到您的 User 模型中,以便获得up_votes帮助程序:

class User < ActiveRecord::Base
  acts_as_voter
end
于 2016-01-28T18:43:41.063 回答