Как да извършвате математически изчисления в Active Record Querying в Rails

Създавам приложение и намирам за необходимо да извърша някои прости математически изчисления в моята заявка. По същество имам база данни с дневни стойности от S&P 500 и трябва да получа списък с дни в зависимост от въведените критерии.

Потребителят въвежда както дневен диапазон, така и % диапазон. Например, ако диапазонът от дати е 1 януари 2013 г. - 1 април 2013 г. и % диапазонът е -1% - 1%, той трябва да върне списък с всички дневни стойности на S%P 500 между датите, където има разлика между началните и стойностите на затваряне са в диапазона %.

Проблемът е, че всъщност нямам колона за %; Имам само колона за отваряне/затваряне на стойности. Достатъчно просто е да се изчисли %, като се имат предвид само стойностите за отваряне и затваряне (затваряне-отворено)/отворено*100. Но не съм сигурен как да направя това в рамките на заявката.

В момента заявката успешно търси в диапазона от дати. Моето запитване е:

@cases = Close.find(:all, conditions:["date between ? and ?",
    @f_start, @f_end])

Но как мога да го накарам да провери дали стойността на текущия ред (close-open)/open*100 е между двете стойности на обхват %?

Като алтернатива, ако това не е възможно или е лоша практика, къде трябва да се справя с това?


person user1287523    schedule 08.04.2013    source източник


Отговори (1)


Можете сами да изчислите диапазона на отваряне/затваряне в Ruby/Rails и да го предадете по същия начин, както правите с диапазона от дати. Нещо като:

percent = @f_percent / 100.0 # 5% => 0.05
low = @f_close * (1.0 - percent)
high = @f_close * (1.0 + percent)
Close.where 'date between ? and ? AND close between ? and ?', \
  @f_start, @f_end, low, high
person Alistair A. Israel    schedule 08.04.2013