ruby-on-rails-3 - query - ruby rails active record
Ordenar jugadores en la SUMA de su modelo de asociaciĆ³n (1)
Deberías poder usar algo como esto:
class Player
scope :order_by_prize, joins(:results).select(''name, sum(results.prize) as total_prize'').order(''total_prize desc'')
Consulte la api de los rieles: consulta de registros activos para obtener más información.
Tengo una base de datos con 6500 players
y cada jugador tiene un promedio de 15 results
juegos.
Caso de uso
Quiero generar una lista de jugadores, ordenada por la suma del dinero del premio (un campo en la tabla de resultados). Prefiero que esto esté en algún tipo de ámbito, por lo que también puedo filtrar la lista en el país del jugador, etc.
Actuación
He visto publicaciones que mencionan un campo cache_counter
para el rendimiento. En mi caso , tengo miles de registros de resultados (más de 75.000), por lo que no quiero que los cálculos se realicen cada vez que alguien visita los listados generados.
Pregunta
¿Cuál es el mejor patrón para resolver esto? ¿Y cómo lo implemento?
Modelos
class Player < ActiveRecord::Base
has_many :results
end
class Result < ActiveRecord::Base
belongs_to :player
end
Schemas
create_table "players", :force => true do |t|
t.string "name"
t.string "nationality"
end
create_table "results", :force => true do |t|
t.integer "player_id"
t.date "event_date"
t.integer "place"
t.integer "prize"
end
Actualizar
Lo que intento lograr es llegar a un punto en el que pueda usar:
@players = Player.order_by_prize
y
@players = Player.filter_by_country(''USA'').order_by_prize(''desc'')