我有Thinking Sphinx gem,我用它来取代我目前的高级搜索设置。
我正在存储用户dob,然后将其转换为用户模型中的年龄。
User.rb:
def age
now = Time.now.utc.to_date
now.year - birthday.year - ((now.month > birthday.month || (now.month == birthday.month && now.day >= birthday.day)) ? 0 : 1)
end
我不确定如何根据用户年龄添加实施搜索。例如,访问者从双下框中选择年龄,22到27.这应该返回年龄在22到27岁之间的用户。
如果有人可以提供一个例子,该怎么看?
答案 0 :(得分:1)
实现它的一种方法是在用户输入的DOB旁边添加一个年龄列,并有一个触发器,每天更新一次所有年龄段。您可以轻松索引并使用BETWEEN进行查询。
答案 1 :(得分:1)
将用户的dob转换为保存之前的年龄是不是更有意义,然后只将年龄保存到数据库?因此,在控制器中,在:create
或:update
方法期间,只需运行该方法,并将年龄保存到数据库。
答案 2 :(得分:0)
我会将出生日期存储为时间戳属性,然后按照您所追踪的年龄/年龄的第一个和最后一个日期的范围过滤Sphinx搜索结果。
这可以避免让您的用户模型保存年龄(需要在数据库和Sphinx中定期更新)。