出生日期存储在数据库中时按年龄过滤的问题

时间:2013-04-06 14:00:31

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我做了很多研究,没有找到任何相关的内容。问题是我的Users表有一个DOB列。我的用户模型有一个计算用户年龄的年龄方法。我可以按如下方式显示用户年龄:current_user.age并且它可以正常工作。但我不能在查询中使用age,因为它不是User模型中的属性。其他网站,例如约会网站如何根据年龄选项提供过滤器?我无法想象他们在数据库中有一个年龄列,因为继续更新它会很痛苦。简而言之,如何根据用户提供的年龄范围过滤结果?

1 个答案:

答案 0 :(得分:2)

假设您要查找截至今日18岁和20岁之间的用户,并将DOB存储在名为dob的字段中。

今天正好18岁的人将于1995年4月6日出生。明天年满21岁的人将于1993年4月7日出生。

所以你希望DOB之间的用户包括1993年4月5日和1995年4月6日。

18.years.ago.to_date
=> Thu, 06 Apr 1995
(20.years.ago + 1.day).to_date
=> Mon, 07 Apr 1993

您现在可以使用

User.where("dob >= ? AND dob <= ?", 20.years.ago + 1.day, 18.years.ago)