Ruby DataMapper: порядок и / или фильтрация запроса по вычисленному значению

Есть ли способ, используя структуры объектов DataMapper::Query::Condition и DataMapper::Query::Direction, установить условие предложения WHERE и / или предложение ORDER BY в соответствии с вычисленным значением?

В нашей модели User у нас есть два поля даты. Наши пользователи запросили возможность фильтрации и заказа по количеству лет между этими двумя датами. Из-за проблем со скоростью, а также из-за того, что результаты разбиты на страницы на уровне базы данных, эти вычисления должны выполняться в базе данных, а не после того, как результаты возвращаются на сервер RoR.

Я попробовал следующее в качестве подтверждения концепции (используя поля Integer) в консоли Rails:

direction = DataMapper::Query::Direction.new(User.integer_field_2 - User.integer_field_one, :asc)

и это дает следующую ошибку:

NoMethodError: undefined method `-' for #<DataMapper::Property::Integer @model=User @name=:integer_field_2>

Я бы предпочел не писать запрос в прямом SQL, так как (а) это делается как часть универсального метода для сортировки и фильтрации (потенциально) любого свойства объекта User, и (б) мы пытаемся сохранить ORM-база данных не зависит (хотя в данный момент используется PostgreSQL, поэтому, хотя это и последний вариант, он является опцией).

Любая помощь будет принята с благодарностью, даже если это "извините, но прямой SQL - единственный путь". Благодарю.

0 ответов

Другие вопросы по тегам