named_scope用于相关表中列的总和

时间:2011-03-29 14:43:46

标签: ruby-on-rails activerecord sum has-many named-scope

我的SQL技能充其量是可笑的,这就是为什么Rails和ActiveRecord让我的生活变得更轻松。然而,这一次,它可能代表了一个拐杖,让我无法理解后端发生了什么,以便知道要给named_scope提供什么。

我正在尝试返回代表游戏中得分最高的“演员”的表格的前10个记录。分数通过Actor> Acts> Decsisons.point_value

计算

我可以轻松地获得任何一个角色的得分,但是联接和总和高于我的SQL理解,以便将其范围扩展到整个数据库中的前10名。

这是我目前拥有的Actor模型:

class Actor < ActiveRecord::Base
  has_many :acts, :dependent => :destroy
  has_many :decisions, :through => :acts, :order => 'created_at'

  named_scope :high_scores, {
    :conditions => {:finished => true}, 
    :joins => "INNER JOIN acts ON actor.id = acts.actor_id INNER JOIN decisions on decision.id = decision.act_id", 
    :group => 'actor.id',
    :select =>'actors.*, SUM(acts.decisions.point_value) AS score', 
    :order => "score DESC", 
    :limit => 10
  }

end

根据这里和其他一些网站上的一些帖子尝试了一些事情之后,我显然没有理解正在发生的事情或者named_scope需要连接的点。一些清晰度将非常值得赞赏。感谢。

*编辑:将named_scope更新为我目前拥有的

现在这给了我以下错误:

  

Mysql ::错误:'字段列表'中的未知列'acts.decisions.point_value':SELECT actors。*,SUM(acts.decisions.point_value)AS得分FROM actors INNER JOIN作用于actor。 id = acts.actor_id关于decision.id = decision.act_id的INNER JOIN决定WHERE(actorsfinished = 1)GROUP BY actor.id ORDER BY得分DESC LIMIT 10

1 个答案:

答案 0 :(得分:0)

在表格列中设置最终得分,因为它似乎不太占用资源。