查找包含在数字范围内的记录(最小 - 最大)

rma*_*002 5 postgresql activerecord ruby-on-rails ruby-on-rails-4

Course.rb

min_age: integer
max_age: integer
Run Code Online (Sandbox Code Playgroud)

学生年龄来自params[:age]- 例如15 岁,这意味着学生15岁,他寻找的课程将涵盖他的年龄:

我有课程:

id    min_age   max_age
------------------------
1     5          15
2     10         25
3     10         55
4     20         40
Run Code Online (Sandbox Code Playgroud)

题:

如何查找min_age和max_age涵盖年龄参数值的所有记录?如果学生说他15岁,他应该看到的课程是:

1,2和3因为这些是涵盖这个年龄的人.

更多,我需要在搜索模型中使用它来创建搜索记录,当有人搜索课程并且返回的结果是用户(提供这些课程的导师)时.

  def find_courses
    users = User.joins(:courses).where("courses.lesson ILIKE ?", "%#{lesson}%")
    # failed attempt:
    users = users.where('course.min_age >= :age or courses.max_age <= :age', age: age)
  end
Run Code Online (Sandbox Code Playgroud)

感谢您的时间.

根据接受的答案:

Course.where('min_age <= :age AND max_age >= :age', age: 18)
Run Code Online (Sandbox Code Playgroud)

上面的sql将要求两个条件都为true才能显示记录:

id    min_age   max_age
------------------------
1     5  true  + 15 false = false
2     10 true  + 25 true  =  true
3     10 true  + 55 true  =  true
4     20 false + 40 true  =  false
Run Code Online (Sandbox Code Playgroud)

这将返回id为2和3的记录

And*_*tad 6

更改大于/小于符号并使用AND

Course.where('min_age <= :age AND max_age >= :age', age: 18)
Run Code Online (Sandbox Code Playgroud)