2009-11-06 8 views
0

Rails newbie ici. J'essaie d'obtenir des méthodes de classe dans named_scopes. Ma structure d'application est similaire à une application de blog avec des commentaires d'utilisateurs. Chaque modèle de commentaire a un attribut de score déterminé par des évaluations faites par d'autres utilisateurs. Je veux être en mesure d'avoir une portée nommée qui renvoie les dix premiers utilisateurs avec les scores totaux les plus élevés de la somme de tous les scores de chaque commentaire qu'ils ont fait.Rails convertir les méthodes de classe à la portée nommée

Pour obtenir le score total J'ai créé cette méthode:

class User < ActiveRecord::Base 
    # total score for all comments made by a particular user 
    def total_score 
    comments.sum(:score) 
    end 
end 

ensuite pour obtenir les meilleurs scores en tant que méthode de classe que j'utilise ceci:

class User < ActiveRecord::Base 
    # The top ten users ranked by total score 
    def self.top_commenters 
    find(:all, :limit => 10).sort_by {|commenter| commenter.total_score}.reverse 
    end 
end 

J'ai essayé pour obtenir la même fonctionnalité dans une portée nommée, mais je ne peux pas sembler comprendre.

Des suggestions?

+0

Oups, regardez comme ce lien explique tout cela: http://railsforum.com/viewtopic.php?id=28709 –

Répondre

1
named_scope :top_commenters, :limit => 10, :order => "total_score DESC"