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