raw rails query left joins includes active ruby-on-rails-3 group-by associations sum has-many

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'')