根据DOB值的年龄搜索用户

时间:2014-11-14 17:50:23

标签: ruby-on-rails thinking-sphinx

我有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岁之间的用户。

如果有人可以提供一个例子,该怎么看?

3 个答案:

答案 0 :(得分:1)

实现它的一种方法是在用户输入的DOB旁边添加一个年龄列,并有一个触发器,每天更新一次所有年龄段。您可以轻松索引并使用BETWEEN进行查询。

答案 1 :(得分:1)

将用户的dob转换为保存之前的年龄是不是更有意义,然后只将年龄保存到数据库?因此,在控制器中,在:create:update方法期间,只需运行该方法,并将年龄保存到数据库。

答案 2 :(得分:0)

我会将出生日期存储为时间戳属性,然后按照您所追踪的年龄/年龄的第一个和最后一个日期的范围过滤Sphinx搜索结果。

这可以避免让您的用户模型保存年龄(需要在数据库和Sphinx中定期更新)。