我的搜索功能包括按价格范围,星期几和访客计数来确定查询范围的功能。
但是,价格在一周中的每一天都不同,价格会根据客人数量而变化(不是线性)。我能想到的最好的数据索引方法是为每天/来宾组合创建一个不同的字段,例如,
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:未定义的方法`guests_min'用于#< Sunspot :: DSL ::字段:0x000001080bdcf0>
它没有抱怨常量Date :: DAYNAMES。
似乎Sunspot尝试将任何方法标记解释为字段。如果我更好地理解它,我想甚至会有意义。
所以,我的问题是,有一个聪明的方法让我这样做吗?我是否需要对范围进行硬编码并让我的price方法返回空值?在我不知道的可搜索块中是否有可用的机制?