Допустим, я создаю платформу бронирования отелей, и каждая запись о номере имеет календарь доступности. Общим критерием поиска является поиск по продолжительности. Где пользователь вводит дату начала и дату окончания, а база данных выбирает комнаты, которые не заняты в течение этого времени.
Я реализовал очень наивный подход, когда я сохраняю занятые дни в виде массива дней.
attribute :occupied_at_i do
array = []
if !occupied_at.empty?
occupied_at.each do |date|
array << Time.parse(date).to_i
end
end
array
end
А затем на стороне клиента я добавляю следующий код javascript для перекрестной проверки, находится ли день в numericRefinement
// Date Filters
$('.date-field')
.on('change', function() {
if(_.every(_.map($('.date-field'), function(date) {return _.isEmpty(date.value) }), function(n) {return n==false;})) {
helper.clearRefinements('occupied_at_i');
var arrayOfDates = addDateFilters();
_.forEach(arrayOfDates, function(n) {
helper.addNumericRefinement('occupied_at_i', '!=', n);
});
showClearAllFilters();
helper.search();
}
});
Итак, это, очевидно, не лучший способ сделать это, мне интересно, что лучше использовать для алголии и поиска по продолжительности?
Спасибо