Ruby on rails:仅从两列范围内获取数据
Posted
技术标签:
【中文标题】Ruby on rails:仅从两列范围内获取数据【英文标题】:Ruby on rails: get data only from the range of two column 【发布时间】:2022-01-19 23:20:21 【问题描述】:我想做一个预约系统,用户只有在有空时才能预约。我有 4 个不同的表:
-
医生表,
docdays 表,其中包含对医生的引用,
包含对 docdays 的引用的 doctimes 表。
预订表
doctimes 表:医生存储日程的地方
start_time | end_time | docday_id |
---|---|---|
08:00:00 | 12:00:00 | 1 |
13:00:00 | 15:00:00 | 1 |
预约表:当医生按时,患者可以预约的地方
start_time | end_time | doctor_id |
---|---|---|
患者将输入他们的预约数据,如start_time
和end_time
,并将其存储到预约表中。
问题是,如何仅在 doctimes 表上显示 start_time
和 end_time
之间的数据,以便我进行验证?
我试过这样:
time_check = Doctor.select('doctors.id,doctimes.start_time,doctimes.end_time').
joins(:docday =>[:doctime]).where('doctimes.start_time BETWEEN ? AND ?', params[:start_time],params[:end_time]).where(id: params[:doctor_id])
但以当前数据为例,当患者尝试:输入09:00:00
- 11:00:00
时,它不会显示任何内容。因为08:00:00
不在09:00:00
- 11:00:00
之间
我做错了什么,它应该显示数据,因为09:00:00
- 11:00:00
仍在08:00:00
- 12:00:00
之间
有没有办法做到这一点?
【问题讨论】:
【参考方案1】:通过您的查询,您正在检查 start_time
8 是否介于 9 和 11 之间,这是错误的。
你要测试的是 start_time 8 小于 11(所以它不在范围之后)和 end_time 12 大于 9(所以它不在范围之前),这样你就知道两个范围重叠了。
.where('doctimes.start_time < ? AND doctimes.end_time > AND ?', params[:end_time], params[:start_time])
【讨论】:
当我输入 7 和 9 时,您的查询会显示数据,即使它不在 doctimestart_time
和 end_time
的范围内。这不是我想要的以上是关于Ruby on rails:仅从两列范围内获取数据的主要内容,如果未能解决你的问题,请参考以下文章