1

編集注:これは、 Railscast#364でカバーされているactiverecord-reputation-system gemに関する質問です。

Vipとクラスのユーザーがお気に入りのオブジェクトPeonに投票できるアプリケーションがあります。とIdeaを無事に集めることができました。2 つの投票タイプを に集約するにはどうすればよいですか? 以下のコードがありますが、total_votes が期待どおりに蓄積されません。vip_votespeon_votestotal_votes

アイデア.rb

has_reputation :vip_votes, 
               :source => :vip,
               :aggregated_by => :sum 

has_reputation :peon_votes, 
               :source => :peon,
               :aggregated_by => :sum 

has_reputation :total_votes, 
               :source => [{ :reputation => :vip_votes },
                           { :reputation => :peon_votes, :weight => 0.8 }],
               :aggregated_by => :sum 

idea_controller.rb

def vip_vote
  @design = Design.find(params[:id])
  @design.add_evaluation(:vip_votes, 1, current_vip)
end

def peon_vote
  @design = Design.find(params[:id])
  @design.add_evaluation(:peon_votes, 1, current_peon)
end

ルート.rb

resources :ideas do
  member { post :vip_vote }
  member { post :peon_vote }
end

ご意見ありがとうございます!

4

3 に答える 3

1

この問題を解決できなかったため、構成する 2 つの投票タイプをコントローラーのインスタンス変数に物理的に追加することにしました。

私は Idea#Show ビュー ファイルで total_votes を使用しているので、以下を追加しました。

idea_controller.rb

def show
@total_votes = @idea.reputation_value_for(:vip_votes).to_i + @idea.reputation_value_for(:peon_votes) * 0.8
end

それでも、これを行うためのより良い方法を誰かが知っていれば幸いです。

于 2012-10-04T04:34:56.357 に答える
0

あなたには手遅れかもしれませんが、これが他の人に役立つことを願っています. お探しのコードは、activerecord-reputation-system gemのクイック スタートにあると思います。

そこで行われたことを問題に置き換えると、次のことが得られます。

has_reputation :total_votes, 
               :source => [{ :reputation => :vip_votes },
                           { :reputation => :peon_votes, :weight => 0.8 }] # no comma here
               # this line seems to be assumed: :aggregated_by => :sum

テストしていませんが、うまくいけば役に立ちます...

于 2013-03-06T04:38:55.090 に答える
0

Peon.rb に、このように定義された評判を持つ「peons」テーブルがある場合

has_reputation :votes, source: :user, aggregated_by: :sum

次に、peon_votes の Idea.rb でこれを行う必要があります。

 has_reputation :peon_votes,
    :source => {reputation: :votes, of: :peons}  

同じことがVip.rbにも当てはまります

Idea.rb の総投票数を計算するには、次のようにします。

has_reputation :total_votes, 
               :source => [{ :reputation => :vip_votes },
                           { :reputation => :peon_votes, :weight => 0.8 }],
               :aggregated_by => :sum 
于 2013-03-25T06:49:12.040 に答える