Ruby on Rails,选择年龄范围为Active Record的用户

时间:2016-07-17 14:11:48

标签: ruby-on-rails activerecord

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调用

2 个答案:

答案 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)