2 Stimmen

Rails-Suche mit drei Tabellen und einer SUM-Operation

Ich bin ein wenig ratlos, wie ich die gewünschte Reihenfolge der Datensätze mit einer Suchoperation erreichen kann.

Nehmen wir an, Sie hätten drei Modelle: 1. Websites 2. Links 3. Abstimmungen

Eine Website hat viele Links und ein Link hat viele Stimmen. Jede Stimme hat eine bestimmte Anzahl von Punkten, die ein Benutzer dieser Stimme zuordnen kann. Ich versuche, eine Website-Indexseite zu erstellen, auf der Websites in der Reihenfolge der Summe der Punkte aufgelistet sind, die sie für alle Links für diese Website erhalten haben.

Hier ist eine vereinfachte Version des Schemas

  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

Ich versuche, die richtige Abfrage für aktive Datensätze zu finden, die ich hier verwenden kann. Für jede Hilfe wäre ich dankbar.

0voto

Kenji Crosland Punkte 2694

Wenn man bedenkt, dass ich mir einen Tag lang die Haare gerauft habe, als ich nur eine Stunde, nachdem ich diese Frage gestellt hatte, eine Lösung gefunden hatte.

Im Website-Modell habe ich festgelegt, dass die Website has_many :points, through => :links

Dann die Abfrage:

array = Website.find(:all)

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

Das scheint zu funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X