我正在尝试按年龄过滤结果,并且堆栈上的某人非常友好地建议一种方法来做到这一点。在我的索引操作中,我有:
@users = User.all
@users = User.where("birthday >= ? AND birthday <= ?", params[:min_age].to_i.years.ago + 1.day, params[:max_age].to_i.years.ago)
我想要的是默认显示所有用户,然后给current_user一个按年龄过滤的选项。但是使用上面的代码,它也会拾取第二行并自动过滤结果。结果是它过滤了今天或昨天生日的用户,因为没有传递参数,默认情况下不显示任何用户。我想要一些功能,如果没有传递参数,或者如果没有可能的话,如果没有传递参数,那么它不会在上面的第二行中运行代码。如果没有传递参数,我可以使用默认参数。
答案 0 :(得分:1)
你可以尝试:
@users = User.all
@users = @users.where("birthday >= ?", params[:min_age].to_i.years.ago + 1.day) if params[:min_age]
@users = @users.where("birthday <= ?", params[:max_age].to_i.years.ago) if params[:max_age]
或者也许:
if params[:min_age] && params[:max_age]
@users = User.where("birthday >= ? AND birthday <= ?", params[:min_age].to_i.years.ago + 1.day, params[:max_age].to_i.years.ago)
else
@users = User.all
end