我正在使用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?
它不起作用
答案 0 :(得分:0)
where
子句的参数不得引用模型上的方法。我建议您将阈值年龄(要与用户年龄进行比较)转换为阈值dob并执行以下查询:
@users = User.where("users.dob < ?", Date.today.advance(years: -age))
这将使您的用户年龄超过阈值年龄。如果您对年龄小于阈值年龄的用户感兴趣,可以进行调整。