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_timeend_time,并将其存储到预约表中。

问题是,如何仅在 doctimes 表上显示 start_timeend_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 时,您的查询会显示数据,即使它不在 doctime start_timeend_time 的范围内。这不是我想要的

以上是关于Ruby on rails:仅从两列范围内获取数据的主要内容,如果未能解决你的问题,请参考以下文章

与Ruby on Rails中的范围相关联

Ruby on Rails:嵌套命名范围

作物哈希结构:Ruby on rails

如何使用 ruby​​ on rails 生成人类可读的时间范围

Ruby on Rails 中的表关联

Ruby on Rails,将项目范围的单引号转换为双引号