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
Course.where('min_age <= :age AND max_age >= :age', age: 18)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1104 次 |
| 最近记录: |