我的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(actors
。finished
= 1)GROUP BY actor.id ORDER BY得分DESC LIMIT 10
答案 0 :(得分:0)
在表格列中设置最终得分,因为它似乎不太占用资源。