2009-05-31 17 views
4

Ich habe dieses Bit Code und ich bekomme ein leeres Objekt.Gruppieren und zählen in Rails

@results = PollRoles.find(
      :all, 
      :select => 'option_id, count(*) count', 
      :group => 'option_id', 
      :conditions => ["poll_id = ?", @poll.id]) 

Ist dies die richtige Art, die Abfrage zu schreiben? Ich möchte eine Sammlung von Datensätzen mit einer Options-ID und der Häufigkeit, mit der diese Options-ID im PollRoles-Modell gefunden wird.

EDIT: Dies ist, wie I''m durch die Ergebnisse iterieren:

<% @results.each do |result| %> 
      <% @option = Option.find_by_id(result.option_id) %> 
      <%= @option.question %> <%= result.count %> 
     <% end %> 
+0

Wie verhält sich eine PollRole zu einer Option? Warum druckst du eine neue Frage für jede Option? Würden sich nicht viele "Optionen" auf dieselbe Frage beziehen? Es würde mir helfen, Ihnen eine bessere Antwort zu geben, wenn Sie die grundlegenden 'has_many',' gehört_to' Deklarationen zeigen und ein bisschen mehr Erklärung des Problems, das Sie zu lösen versuchen, hinzufügen. – austinfromboston

Antwort

0

Sie wollen this function verwenden, um Dinge zu tun, wie diese
PollRoles.count(:all, :group => 'option_id') sollte einen Hash zurückgeben jede option_id mit der Zahl abbildet von Datensätzen, die dazu passen.

+0

Ich habe es so geändert: @results = PollRoles.count (: alle,: group => 'option_id',: Bedingungen => ["poll_id =?", @ Poll.id]) aber immer noch eine Null Ergebnis. – alamodey

+0

im confused .. Sie wollen 'eine Sammlung von Datensätzen, die eine Option-ID haben, aber Ihre Bedingung ist: Bedingungen => ["Umfrage_ID =?", @ Umfrage.ID]) .. sind Option ID und Umfrage-ID der selbe .. könnten Sie die Struktur Ihrer DB etwas besser erklären –

+0

Wahlen sind mit einer Abstimmung verbunden. Eine Umfrage hat viele Optionen. Hier versuche ich offensichtlich, die Ergebnisse für eine bestimmte Umfrage anzuzeigen. – alamodey

0

Was bekommen Sie mit diesem:

PollRoles.find (: alle,: conditions => [ "? Poll_id =" @ poll.id]). Sammeln {| p | p.option_id}

+0

Ich bekomme ein leeres Ergebnis, nil. – alamodey

+0

dann haben Sie keine PollRoles mit poll_id == @ poll.id – klochner

+0

OK ich bekomme Ergebnisse tatsächlich. Aber wie durchlaufe ich sie? Siehe bearbeiteten Code. – alamodey

Verwandte Themen