Rails 6 APi从用户出生日期筛选用户年龄

时间:2020-06-28 15:15:32

标签: ruby-on-rails postgresql rails-activerecord

我正在使用Rails 6 API。

我有@users数组,每个用户都有生日(dob)。

我希望过滤器能够根据用户数组上的用户年龄,但是我想在一个查询中使用助手方法来处理该问题,以查找从出生日期开始的年龄并比较过滤器的年龄参数。

在这里,年龄可能是简单数字,也可能是小于18,大于18或18的范围。

我有Helper方法可以从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?

它不起作用

1 个答案:

答案 0 :(得分:0)

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

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

这将使您的用户年龄超过阈值年龄。如果您对年龄小于阈值年龄的用户感兴趣,可以进行调整。

相关问题