ActiveRecord i mediana

Czy ActiveRecord ma jakieś przydatne funkcje żeby obliczyć medianę?

Bez żadnych udziwnień: mam jedną tabelę z jednym polem z którego chcę obliczyć medianę.

Z tego co przejrzałem API w Calculations (http://ar.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html) nie ma takiej metody.

No i jeśli nie ma, czy ktoś się już tym zajmował i może ma gotowy, optymalny kod, którym mógłby się podzielić? :wink:

ActiveRecord nie ma.
Można natomiast zrobić to w następujący sposób:
W zależności od potrzeb, dokonać monkeypatchingu Enumerable (metoda .median będzie dostępna globalnie na wszystkim co includuje w/w moduł), albo zaimplementować to jako metodę danego modelu. Rozwiązanie sposobu pierwszego:

module Enumerable def median elements = self.sort i = (elements.length).to_f / 2 elements.length.odd? ? elements[i] : (elements[i] + elements[i+1]) / 2.0 end end
I wywołanie:

TwojModel.pluck(:pole_po_ktorym_liczysz).median

Dzięki :slight_smile:

Dziwne, ale nie dostałem na meila informacji o odpowiedzi, mimo subskrypcji meila.

Mam jeszcze problem z tym modułem.
Wrzuciłem go do /lib ale ani include ani require w modelu nie chce mi go wczytać. Czyżby znowu się coś zmieniło? RoR 3.2.8.

Dodaj w config/application.rb w class Application …

config.autoload_paths += %W(#{config.root}/lib)