Ordinare i risulati secondo una somma

Allora ho 2 modelli

class Core < ActiveRecord::Base
has_many :votes
end

class Vote < ActiveRecord::Base
belongs_to:core
end

in votes ci sono voti per ogni core (-1,0,1)

Devo visualizzare una classifica dei 10 core con voti + alti.

come devo modificare questa chiamata?
Event.find(:all,:include=>[:votes]))

Grazie

Il giorno 07/nov/07, alle ore 17:59, Luca R. ha scritto:

votes = Vote.sum(:attributo_voto, :group => :core, :order =>
“sum_attributo_voto DESC”)

votes.each do |core, vote|

fai quello che vuoi con i core

end

Ma è possibile ottenere dal metodo sum anche attributi del modello core
ad es. name senza eseguire altre query?
Grazie
Giovanni I. wrote:

Il giorno 07/nov/07, alle ore 17:59, Luca R. ha scritto:

votes = Vote.sum(:attributo_voto, :group => :core, :order =>
“sum_attributo_voto DESC”)

votes.each do |core, vote|

fai quello che vuoi con i core

end

Il metodo che ti ho suggerito contiente tutti gli attributi di core.

Il giorno 07/nov/07, alle ore 19:32, Luca R. ha scritto:

Giovanni I. wrote:

Il metodo che ti ho suggerito contiente tutti gli attributi di core.

Il giorno 07/nov/07, alle ore 19:32, Luca R. ha scritto:

Ok solo che oltre al modello vote associato al modello core ho anche il
modello message e oltre al voto per ogni core ho bisogno anche di sapere
il numero di messaggi.

Quindi con il tuo metodo mi sa che non è possobile avere tutti gli
attributi in una volta sola. Nel ciclo dovrei inserire una query per
ottenere anche il numero di messages associati al core.

spero di sbagliare.
cmq grazie per la pazienza.
Sono ancora agli inizi, (vengo da php)

Allora ho fatto cosi:
Event.find(:all,:include => :event_dates, :joins=>“LEFT JOIN (SELECT
SUM(vote) as vote_total,core_id FROM votes GROUP BY core_id) as
votes_join ON votes_join.core_id=cores.id”, :readonly =>
false,:conditions=>“date_add(event_dates.date, INTERVAL
event_dates.number_days DAY)>=CURDATE()”,:order=>“vote_total
desc”,:limit=>10)

Solo che su event non vedo vote_total. cosa devo fare per vederlo?
Grazie

Giovanni I. wrote:

Il giorno 07/nov/07, alle ore 21:40, Luca R. ha scritto:
Per averli tutti in una volta sola devi usare find_by_sql e costruire
a mano la query (cosa assolutamente indicata per motivi di performance).

Il giorno 07/nov/07, alle ore 21:40, Luca R. ha scritto:

Quindi con il tuo metodo mi sa che non è possobile avere tutti gli
attributi in una volta sola. Nel ciclo dovrei inserire una query per
ottenere anche il numero di messages associati al core.

Per averli tutti in una volta sola devi usare find_by_sql e costruire
a mano la query (cosa assolutamente indicata per motivi di performance).

Se fai il left join senza fare anche il select di ciò che ti serve non
hai nel resultset i dati che hai joinato.

Es.

SELECT A.foo FROM A LEFT JOIN B ON A.bar = B.bar non ti dà i campi di B.

Dovresti fare

SELECT A.foo, B.bar FROM A LEFT JOIN B ON A.bar = B.bar.

L’unica soluzione è usare find_by_sql.

Il giorno 08/nov/07, alle ore 09:10, Luca R. ha scritto: