Мой поиск включает в себя возможность охвата запроса по ценовому диапазону, дню недели и количеству гостей.
Однако цена меняется в каждый день недели, и цена меняется (не линейно) в зависимости от количества гостей.Наилучший способ индексировать данные - создать отдельное поле для каждого комбо-дня / гостя, например,
searchable do
integer :price_sunday_2_guests do
price(:sunday, 2)
end
integer :price_sunday_3_guests do
price(:sunday, 3)
end
...
integer :price_monday_2_guests do
price(:monday, 2)
end
...
# and so on...
end
Очевидно, я не хочу вводить все это. Я хочупостроить эти атрибуты в доступных для поиска блоков.Больше похоже на:
searchable do
Date::DAYNAMES.each do |day_name|
day = DateTime.strptime(day_name, '%A')
(guests_min..guests_max).each do |guests|
sym = (day_name.downcase + '_' + guests.to_s + 'guests_price_abs_max').to_sym
integer sym do
price(day_name, guests)
end
end
end
end
Но я получаю следующее исключение: NoMethodError: неопределенный метод `guest_min 'для #
Он не жалуется на константу Date :: DAYNAMES.
Кажется, что Sunspot пытается интерпретировать любой маркер метода как поле.Что, я полагаю, имело бы смысл, если бы я понял это лучше.
Итак, мой вопрос, есть ли для меня разумный способ сделать это?Нужно ли просто жестко кодировать диапазон и позволить моему методу цены возвращать пустое значение?Есть ли какой-нибудь механизм в поисковом блоке, о котором я не знаю?