acts_as_votable拇指向上/向下按钮

我安装了acts_as_votable gem,它在控制台中工作就像它应该的那样(就像在文档中所说的那样)。 所以我的问题是如何为upvote和downvote按钮设置一个表单? 或者他们可以简单地链接?

这是文档:github.com/ryanto/acts_as_votable/blob/master/README.markdown

我有一个用户和一个图片模型; 用户应该能够喜欢这张照片。 图片视图中的代码,按钮应该是:

 

, by

[buttons here]

提前致谢!

一种方法是为up-downvotes添加自己的控制器操作。 我假设你的控制器中有一个current_user方法。

 # pictures_controller.rb def upvote @picture = Picture.find(params[:id]) @picture.liked_by current_user redirect_to @picture end def downvote @picture = Picture.find(params[:id]) @picture.downvote_from current_user redirect_to @picture end # config/routes.rb resources :pictures do member do put "like", to: "pictures#upvote" put "dislike", to: "pictures#downvote" end end # some view <%= link_to "Upvote", like_picture_path(@picture), method: :put %> <%= link_to "Downvote", dislike_picture_path(@picture), method: :put %> 

以下是我最终使用acts_as_commentable gem进行的操作。 所以我认为这应该适用于你有评论的任何对象。

在我的_comment.html.erb视图中

 <%= link_to "Upvote", {:controller =>"comments", :action => "upvote", :id => comment.id}, :class => 'btn', method: :put %> <%= link_to "Downvote", {:controller =>"comments", :action => "downvote", :id => comment.id}, :class => 'btn', method: :put %> 

在我的routes.rb文件中

 put '/comments/:id/:action' => 'comments#upvote' put '/comments/:id/:action' => 'comments#downvote' 

然后在我的评论控制器

 class CommentsController < ApplicationController before_filter :load_commentable before_filter :find_comment, :only => [:upvote, :downvote] def upvote current_user.upvotes @comment redirect_to(@comment.commentable) end def downvote @comment.downvote_from current_user redirect_to(@comment.commentable) end private def load_commentable resource, id = request.path.split('/')[1, 2] @commentable = resource.singularize.classify.constantize.find(id) end def find_comment @comment = Comment.find(@commentable.id) end end 

之前的filter允许更多function,因此我可以将其添加到任何可评论的对象。 我的节日恰好是节日,但你可以拍照或其他任何东西。 查看acts_as_commentable文档和多态railscast以获取更多相关信息。 这是我的第一篇文章,所以如果这是一个可怕的代码,请告诉我。