0

Voters と Polls の 2 つのモデルがあります。

有権者は次の 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

投票者.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 の作成者である野口克也氏の助けを借りて見つけられた簡単な解決策です。power_votes が誰によって評価されたかを数えることができる場合、voter モデル内で :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 に答える