> Player.joins(:game).order('games.scheduled_start ASC').last(5).sum(:ppg)
=> NoMethodError: undefined method `+' for #<GamePlayer:0x007ff543cd05d8>
> Player.joins(:game).order('games.scheduled_start ASC').sum(:ppg)
=> #<BigDecimal:7ff543cebc20,'0.30115E3',18(18)>
Таким образом, я не понимаю, почему .last(n)
нарушает мою способность вызывать .average
и .sum
на этой коллекции.рубин средней и сумма на последней (п)
EDIT
[19] pry(main)> GamePlayer.order('id desc').limit(10).map{|x| x.ppg.to_f}
GamePlayer Load (0.6ms) SELECT "game_players".* FROM "game_players" ORDER BY id desc LIMIT 10
=> [14.0, 0.75, 1.2, 0.0, 2.55, 1.19, 2.04, 2.0, 0.0, 24.68]
[20] pry(main)> GamePlayer.order('id desc').limit(10).average(:ppg).to_f
(74.4ms) SELECT AVG("game_players"."ppg") AS avg_id FROM "game_players" LIMIT 10
=> 8.943831900603671
[21] pry(main)> GamePlayer.order('id desc').limit(50).average(:ppg).to_f
(73.4ms) SELECT AVG("game_players"."ppg") AS avg_id FROM "game_players" LIMIT 50
=> 8.943831900603671
[22] pry(main)> GamePlayer.order('id desc').limit(50).map{|x| x.ppg.to_f}.sum/50
GamePlayer Load (0.9ms) SELECT "game_players".* FROM "game_players" ORDER BY id desc LIMIT 50
=> 3.649800000000001
Кто-нибудь есть идея, что это несоответствие составляет около?
Я не думаю, что вы можете использовать 'limit' и' sum' таким образом – Stefan
Если я не ошибаюсь, 'SUM' возвращает одну строку, а' LIMIT' не имеет никакого эффекта. – Stefan
он работал нормально ... однажды у меня был объект отношения, вызвавший 'average (: ppg)' работал отлично. – Dudo