User.rb
# Attributes
# (..)
# birthdate (string)
# format "mm/yyyy"
def age
dob = self.birthdate.to_date
now = Time.now.utc.to_date
now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
end
在控制台中:
irb(main):002:0> current_user.age
=> 7
我可以做到以下几点:
age_range = "25-65"
User.where(:age => between age_range)
我一直坚持如何从age(class方法)获取值到where调用
答案 0 :(得分:3)
首先:在数据库中使用date作为birthdate的类型。
然后你可以使用:
User.where(birthdate: 65.years.ago..25.years.ago)
如果您无法更改birthdate类型,请使用SQL转换它(例如使用PostrgeSQL):
User.where('to_date(birthdate, 'MM/YYYY') between ? and ?', 65.years.ago, 25.years.ago)
但是你可能仍需要纠正它,因为你没有确切的一天,只有一个月。
答案 1 :(得分:0)
使用PostgreSQL,您可以使用该Rails范围
scope :for_age_range, -> min, max {
where("date_part('year', age(birthdate)) >= ? AND date_part('year', age(birthdate)) <= ?", min, max)
}
User.for_age_range(18, 24)