Скажем, например, у меня есть событие с start_date
и length
(как целое число, представляющее дни).Rails & Ransack - Сортировка/поиск на основе определения в модели
В модели я определяю 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" %>
Если я попробовать то же самое для датой_окончания (<%= sort_link @q, :end_date, "End" %>
) он, к сожалению, молча терпит неудачу, как я полагаю, он ищет end_date
как столбец в таблице и не находя его.
Я просто глуп, или я пытаюсь сделать что-то Ransack просто не было сделано?
похоже, что ransack переводит параметры поиска в запросы на ORM ActiveRecord, которые, безусловно, потерпят неудачу, если у вас нет реального столбца, который может искать базовая БД. – bdares
Спасибо за комментарий @bdares. Теперь мне удалось установить в модели «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'. Это работает, но чувствует себя ужасно «взломанным». – bensmithbwd
@bensmithbwd - Трудно увидеть полное решение в вашем комментарии. Позаботьтесь о том, чтобы написать полный пример, чтобы мы могли лучше понять решение. Тогда вы можете принять свой собственный ответ. –