2010-08-11 4 views
2

Je suis un peu perplexe pour obtenir l'ordre des dossiers que je veux avec une opération de recherche.Rails trouvent avec trois tables et une opération de SUM

Disons que vous aviez trois modèles: 1. Sites 2. Liens 3. Votes

Un site a de nombreux liens et un lien a beaucoup de votes. Chaque vote a un certain nombre de points qu'un utilisateur peut attribuer à ce vote. J'essaye d'obtenir une page d'index de site Web où les sites Web sont énumérés dans l'ordre de la somme des points qu'ils ont reçus pour tous les liens pour ce site Web.

Voici une version simplifiée du schéma

create_table "votes", :force => true do |t| 
    t.integer "link_id" 
    t.integer "points" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "user_id" 

    end 

    create_table "links", :force => true do |t| 
    t.string "name" 
    t.string "link" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "user_id" 
    t.integer "votes_count", :default => 0 
    t.integer "website_id" 
    end 

    create_table "websites", :force => true do |t| 
    t.string "domain" 
    t.boolean "verified",   :default => false 
    t.integer "user_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

Je suis en train de penser à la bonne requête d'enregistrement actif à utiliser ici. Toute aide serait appréciée.

Répondre

0

penser que je passé une journée en tirant mes cheveux quand je suis venu avec une solution juste une heure après que j'ai posté cette question.

Dans le modèle de site Web, je mis que le site has_many :points, through => :links

Puis la requête:

array = Website.find(:all) 

array.sort_by {|w| w.donations.sum('amount')}.reverse 

Cela semble fonctionner.