Rails:过滤结果的问题

时间:2013-04-07 04:48:25

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

我正在尝试按年龄过滤结果,并且堆栈上的某人非常友好地建议一种方法来做到这一点。在我的索引操作中,我有:

@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一个按年龄过滤的选项。但是使用上面的代码,它也会拾取第二行并自动过滤结果。结果是它过滤了今天或昨天生日的用户,因为没有传递参数,默认情况下不显示任何用户。我想要一些功能,如果没有传递参数,或者如果没有可能的话,如果没有传递参数,那么它不会在上面的第二行中运行代码。如果没有传递参数,我可以使用默认参数。

1 个答案:

答案 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