Załóżmy, że buduję platformę rezerwacji hoteli, a każdy rekord pokoju ma kalendarz dostępności. Typowe kryteria wyszukiwania to wyszukiwanie według czasu trwania. Gdzie użytkownik wprowadza datę początkową i końcową, a baza danych pobiera pokoje, które nie są zajęte od tego czasu.Jak wyszukiwać według czasu trwania w Algolii
Wdrożyłem bardzo naiwne podejście, w którym przechowuję zajęte dni jako tablicę dni.
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
I wtedy po stronie klienta, dodać następujący kod JavaScript do cross-sprawdzić, czy dzień jest w 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();
}
});
tak, to oczywiście nie jest dobrym sposobem, aby to zrobić , Zastanawiam się, co jest lepsze do wykorzystania w algolii i wyszukiwania według czasu trwania?
Dzięki
Jestem przekonany, że to dobry sposób na rozwiązanie problemu. Wyszukiwanie dostępności jest zawsze trudne. Co przeszkadza ci w tym rozwiązaniu? – Jerska