使用thumbs_up gem缓存问题

时间:2012-03-05 07:11:08

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 gem

github上的thumbs_up gem没有解释如何在不同的模型中缓存投票。

这个thumbs_up gem连接到一个用户和一个微博,我想为微博表创建一个列,以便计算微博的票数。

我这样做,所以我可以通过投票数对微博进行排序。所有建议都非常欢迎!

对于那些不熟悉这个宝石的人,这里是:https://github.com/brady8/thumbs_up

1 个答案:

答案 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")
像我说的那样,不优雅,但它有效。你可以在构建我的评论时构建你的微博,它应该适合你。希望这会帮助你。