Скажем, например, у меня есть событие с start_date
и length
(как целое число, представляющее дни).
В модели я определяю end_date
как start_date + length.days
очень просто, как и следовало ожидать:
def end_date
start_date + length.days
end
В шаблоне все работает нормально, я могу использовать event.end_date
для отображения даты начала плюс сколько дней было установлено, однако, теперь я хочу упорядочить события по дате окончания с помощью Ransack.
Ссылка сортировки для start_date
выглядит так: <%= sort_link @q, :start_date, "Start" %>
Если я попытаюсь сделать то же самое для end_date (<%= sort_link @q, :end_date, "End" %>
), это, к сожалению, тихо завершится ошибкой, поскольку я предполагаю, что он ищет end_date
как столбец в таблице и не находит его.
Я просто веду себя глупо или пытаюсь сделать что-то, для чего Ранзак просто не был создан?
ransacker :end do |r|
в модели следующим образом:Arel::Nodes::SqlLiteral.new("DATE_ADD(events.start_date, INTERVAL events.length DAY)")
. Что производит запрос:SELECT DISTINCT events.* FROM events ORDER BY DATE_ADD(events.start_date, INTERVAL events.length DAY) DESC LIMIT 30 OFFSET 0
. Это работает, но кажется ужасно «хакерским». - person bensmithbwd   schedule 07.03.2013