Método find ordenado por método del m odelo

Hola a todos,

Espero que alguien me puede ayudar. quiero ordenar los artistas de mi
aplicación en base a cuantas veces se
han reproducido sus canciones, pero no consigo dar con ello.

Supongo que debería ser algo así:

class Artist < ActiveRecord::Base

def playCount
tracks.sum(:play_count)
end

end

Artist.find(:all, :order => playCount)

El problema es que no me reconoce el método playCount. El método
playCount funciona correctamente si es llamado
desde un artista (Artist.find(:first).playCount => 16), pero dentro del
método find no lo reconoce

Un saludo y gracias

Paco G. wrote:

Hola a todos,

Espero que alguien me puede ayudar. quiero ordenar los artistas de mi
aplicación en base a cuantas veces se
han reproducido sus canciones, pero no consigo dar con ello.

Supongo que debería ser algo así:

class Artist < ActiveRecord::Base

def playCount
tracks.sum(:play_count)
end

end

Artist.find(:all, :order => playCount)

El problema es que no me reconoce el método playCount. El método
playCount funciona correctamente si es llamado
desde un artista (Artist.find(:first).playCount => 16), pero dentro del
método find no lo reconoce

Un saludo y gracias

El :order aplica un “order by” en el SQL, el atributo playCount no
existe en tu base de datos, por eso dice que no lo reconoce.

Para ordenarlos podrias hacer:

Artist.find(:all).sort{|a1, a2| a1.playCount <=> a2.playCount }

o

Artist.find(:all).sort_by(&:playCount)

Aca se habla de lo mismo: Ordenar por campos virtuales - ES - Ruby-Forum