0

私は年齢で結果をフィルタリングしようとしていますが、スタック上の誰かが親切にそれを行う方法を提案してくれました。私のインデックスアクションには、次のものがあります。

@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 に年齢でフィルターするオプションを与えることです。しかし、上記のコードでは、2 行目も取得され、結果が自動的にフィルタリングされます。その結果、パラメータが渡されず、デフォルトでユーザーが表示されないため、誕生日が今日または昨日のユーザーがフィルタリングされます。パラメーターが渡されない場合、またはそれが不可能な場合は、パラメーターが渡されない場合にデフォルトのパラメーターを使用できる場合、上記の 2 行目のコードを実行しない機能が必要です。

4

1 に答える 1

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
于 2013-04-07T04:52:12.773 に答える