【发布时间】:2020-10-18 19:25:03
【问题描述】:
我正在研究 Rails 6 API。
我有@users 数组,每个用户都有出生日期(dob)。
我希望过滤器对用户数组中的用户年龄进行过滤,但我想在一个查询中处理它,使用辅助方法从出生日期查找年龄并比较过滤器年龄参数。
在这里,年龄可能是一个简单的数字,也可能是小于 18、大于 18 或数字 18 的范围
我有帮助方法从 DOB 获取年龄
def user_age(dob)
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
我可以将它传递给查询吗
age = params[:filter][:age]
@users = @users.joins(:user_profile).where(user_age('user.dob') == age) if age.present?
它不工作
【问题讨论】:
-
为什么不只使用
.order(dob: :desc)或.order(dob: :asc),这取决于您是想先获得老用户还是最后获得老用户。 -
我需要将过去的年龄与每个用户拥有出生日期的用户数据库进行比较。这里我需要先获取用户的年龄并在一个查询中进行比较。
-
这能回答你的问题吗? PostgreSQL Age Calculation from date type
标签: ruby-on-rails postgresql rails-activerecord