かなり簡単だと思いますが、どういうわけかドキュメントにはこれが欠けています(おそらくその単純さのため)。
最小値と最大値の間にあるテーブルの値を表示したい。
私のコードは次のとおりです。
def something
@foo = Foo.where( :number => ((params[:min])..(params[:max])) )
respond_to do |format|
...
end
end
私は何か間違ったことをしていますか?
かなり簡単だと思いますが、どういうわけかドキュメントにはこれが欠けています(おそらくその単純さのため)。
最小値と最大値の間にあるテーブルの値を表示したい。
私のコードは次のとおりです。
def something
@foo = Foo.where( :number => ((params[:min])..(params[:max])) )
respond_to do |format|
...
end
end
私は何か間違ったことをしていますか?
パラメータが文字列ではなく数値であることを確認しましたか?
@foo = Foo.where(number: (params[:min].to_i)..(params[:max].to_i))
Railsは範囲を受け入れます
# select all where number between 1 and 10
Foo.where number: 1..10
# between 1 and 9
Foo.where number: 1...10
あなたが持っているものはうまくいくはずですが、このような状況では、データベースに何が届くかを制御するのが好きです. 通常、私はこのように書きます
def something
# Make sure something gets set and is an integer
min = (params[:min] || 0).to_i
max = (params[:max] || 10).to_i
# Do some basic range checking so that the query doesn't return every row in the database
min = 0 if min < 0
max = 100 if max > 100
@foo = Foo.where( :number => (min..max) )
respond_to do |format|
...
end
end
実際には、先ほど追加した余分なコードを Foo オブジェクトのメソッドに配置して、データを取得する必要があります。これは、モデル コードであるべきコードでコントローラーが乱雑になるためです。
SQL を使用して同じことを行う方法を考えてみてください。以下が機能するはずです:
Foo.where("number>?", params[:min]).where("number<?",params[:max])