Twitter ActiveRecord声誉:将主要声誉计为非主要声誉

时间:2013-08-15 05:35:27

标签: ruby-on-rails

我有两种模式:选民和民意调查。

选民可以通过两种方式对投票进行投票:1)上/下投票2)权力投票

我有上/下投票工作,但我希望能够知道用户累积的权力投票数量,因为他们只有一定数量。

poll.rb

class Poll < ActiveRecord::Base
  belongs_to :voter

  has_reputation :votes,
                 source: :voter

  has_reputation :powervotes,
                 source: :voter,
                 source_of: [{reputation: :voter_powervotes, of: :voter}]

  has_reputation :score,
                 source: [
                   { reputation: :votes },
                   { reputation: :powervotes, weight: 2 }]

  def upvote(voter)
    self.add_or_update_evaluation(:votes, 1, voter)
  end

  def downvote(voter)
    self.add_or_update_evaluation(:votes, -1, voter)
  end

  def powervote(voter)
    self.add_or_update_evaluation(:powervotes, 1, voter)
  end

  def score
    self.reputation_for(:score).to_i
  end
end

voter.rb

class Voter < ActiveRecord::Base
  has_many :polls

  has_reputation :voter_powervotes,
                 source: [reputation: :powervotes, of: :polls]

  def powervotes
    self.reputation_for(:powervotes).to_i
  end
end

当我作为用户对某个投票进行powervote()然后调用Voter.powervotes时,它返回0.什么给出?我觉得这是一个奇迹,我自己走得这么远,但现在我迷失了。也许这是不可能的,我只需要手动查询数据库?

1 个答案:

答案 0 :(得分:0)

这是一个在gem的创建者Katsuya Noguchi的帮助下找到的简单解决方案。当您可以计算power_votes的评估对象时,无需在选民模型中创建:voter_powervotes声望。在看到它有多么简单之后,我感觉像是一个傻瓜。希望这有助于其他人!

voter.rb

def powervotes
  Poll.evaluated_by(:power_votes, self).count.to_i
end

GitHub问题参考:#63 STI pulls wrong target_id for non-primary reputation