Как выполнять математические вычисления в Active Record Querying в Rails

Я создаю приложение и считаю необходимым выполнить некоторые простые математические вычисления в своем запросе. По сути, у меня есть база данных с ежедневными значениями S&P 500, и мне нужно получить список дней в зависимости от введенных критериев.

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

Проблема в том, что на самом деле у меня нет столбца для %; У меня есть только столбец для открытия/закрытия значений. Достаточно просто рассчитать %, учитывая только значения открытия и закрытия (close-open)/open*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