github上的thumbs_up gem没有解释如何在不同的模型中缓存投票。
这个thumbs_up gem连接到一个用户和一个微博,我想为微博表创建一个列,以便计算微博的票数。
我这样做,所以我可以通过投票数对微博进行排序。所有建议都非常欢迎!
对于那些不熟悉这个宝石的人,这里是:https://github.com/brady8/thumbs_up
答案 0 :(得分:1)
我在项目中使用Thumbs_up gem,用户在该项目中撰写评论,其他用户对其进行投票。我遇到了同样的问题,并提出了以下解决方案。它不优雅,但它的工作原理。我希望有经验的人可以提供更好的解决方案。
在我的用户模型中,我有:
class User < ActiveRecord::Base
acts_as_voter
has_karma(:chapters, :as => :user) # tracks "up votes" for all a user's chapters
has_many :reviews
end
我的评论模型有一个:vote_cnt属性和DB列,每当投票时我都会更新:
class Review < ActiveRecord::Base
attr_accessible :heading, :body, :notes, :published, :user_id, :vote_cnt
acts_as_voteable
belongs_to :user
###############################################################################
# update the vote_cnt field in the database, for sorting and query purposes.
def update_vote_count
if self.vote_count != self.vote_cnt
self.vote_cnt = self.vote_count
self.save
end
end
end
在我的评论控制器中,我有一个操作来处理我的评论视图中的投票链接点击:
################################################################
def vote_for
@review = Review.find(params[:id])
begin # try-rescue
current_user.vote_for(@review)
@review.update_vote_count
redirect_to review_path( @review ), :notice => "Successfully voted for this review."
rescue
redirect_to review_path( @chapter ), :notice => "Sorry, can't vote for a review twice, or you don't have voting rights."
end
end
现在,毕竟我可以最终检索由评论投票计数排序的current_user可访问的评论集:
@reviews =@user.reviews.accessible_by(current_ability).order("vote_cnt DESC")
像我说的那样,不优雅,但它有效。你可以在构建我的评论时构建你的微博,它应该适合你。希望这会帮助你。