【问题标题】:Rails 6 APi Filter the users age from User Date of BirthRails 6 APi 从用户出生日期过滤用户年龄
【发布时间】: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


【解决方案1】:

where 子句的参数不得引用模型上的方法。我建议您将阈值年龄(您希望比较用户的年龄)转换为阈值 dob 并执行如下查询:

@users = User.where("users.dob < ?", Date.today.advance(years: -age))

这将为您提供超过阈值年龄的用户。如果您对低于阈值年龄的用户感兴趣,您可以对其进行调整。

【讨论】:

    猜你喜欢
    • 2013-08-16
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多