2014-11-14 131 views
0

我有思维狮身人面像宝石,我用它来取代我当前的高级搜索设置。根据他们的年龄从DOB值搜索用户

我正在存储用户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岁之间的用户。

如果有人能提供一个例子,这应该看起来如何?

回答

1

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

+0

是的,我想过,但总是建议不要将用户年龄保存在数据库中。我计划在某个时候拥有300,000多名注册会员。即使这是一个梦想大声笑。所以我可以做我一直被告知不要做的事情。谢谢 – xps15z 2014-11-14 20:06:37

+0

没问题!祝你好运! – aspencer8111 2014-11-14 20:08:46

1

完成此操作的一种方法是在用户输入的DOB旁边添加一个年龄列,并且每天更新所有年龄的触发器。您可以很容易地编制索引并使用BETWEEN进行查询。

0

我会将出生日期存储为timestamp属性,然后按照您对之后年龄/年龄有效的第一个和最后一个日期范围筛选Sphinx搜索结果。

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