我觉得相当容易,但不知何故,文档缺乏这个(可能是它的简单)。
我想显示表中的值,介于最小值和最大值之间
我的代码是:
def something
@foo = Foo.where( :number => ((params[:min])..(params[:max])) )
respond_to do |format|
...
end
end
我做错了吗?
答案 0 :(得分:6)
你有没有检查过你的参数是数字而不是字符串?
@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
答案 1 :(得分:1)
想一想如何使用SQL来做同样的事情。以下应该工作:
Foo.where("number>?", params[:min]).where("number<?",params[:max])
答案 2 :(得分:1)
你有什么应该工作,但在这些情况下,我喜欢添加一些控制到什么到数据库。通常,我会像这样写
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对象的一个方法中来获取数据,因为这会使控制器混乱,代码应该是模型代码。
答案 3 :(得分:1)
find_by_all方法:
Foo.find_all_by_number(params[:min]..params[:max])
或使用一些SQL
Foo.where('id in (?)', params[:min]..params[:max])