0

我有两个模型:选民和民意调查。

选民可以通过两种方式对民意调查进行投票:1) 赞成/反对票 2) 权力投票

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

民意调查.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

选民.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。什么给出了?我觉得我一个人能走到这一步真是个奇迹,但现在我迷路了。也许这是不可能的,我只需要手动查询数据库?

4

1 回答 1

0

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

选民.rb

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

GitHub 问题参考:#63 STI 为非主要声誉提取错误的 target_id

于 2013-08-30T12:56:44.580 回答