1

编辑说明:这是关于Railscast#364中涉及的activerecord-reputation-system gem的问题

我有一个应用程序,其中Vip和类的用户可以为他们最喜欢的对象Peon投票。Idea我能够成功地收集vip_votespeon_votes。我怎样才能将两种投票类型聚合成total_votes?我有下面的代码,但 total_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 

想法控制器.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

无法解决问题,我求助于将两种组合投票类型物理添加到控制器中的实例变量中。

我在 Idea#Show 视图文件中使用了 total_votes,所以我添加了以下内容。

想法控制器.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

然后你应该在 Idea.rb 中为 peon_votes 执行此操作。

 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 回答