重新编写SQL查询并转换为ActiveRecord
我在重新编写SQL查询并将其转换为重新编写SQL查询并转换为ActiveRecord,sql,activerecord,Sql,Activerecord,我在重新编写SQL查询并将其转换为ActiveRecord查询时遇到了一些困难 假设我有一个表resources,它提供了由id标识的资源列表(并包含其他属性) 假设我还有一个表reservation\u slots,该表将这些资源上的预订列为一小时时段,并带有以下属性:id、start\u datetime、reservation\u id,以及resource\u id(其中引用了resources.id)。资源上的多小时预订在此表中将有多行 我想检索所有“不可用”时间段的列表:start\
ActiveRecord
查询时遇到了一些困难
假设我有一个表resources
,它提供了由id
标识的资源列表(并包含其他属性)
假设我还有一个表reservation\u slots
,该表将这些资源上的预订列为一小时时段,并带有以下属性:id
、start\u datetime
、reservation\u id
,以及resource\u id
(其中引用了resources.id
)。资源上的多小时预订在此表中将有多行
我想检索所有“不可用”时间段的列表:start\u datetimes
,其中所有资源(在resources
表中)都已保留。我可以使用以下SQL检索这样的列表:
select start_datetime
from reservation_slots
where not exists (
select r.id
from resources r
where r.id not in (
select resource_id
from reservation_slots rs
where rs.start_datetime = reservation_slots.start_datetime
)
)
有没有更简单或更有效的方法来表达这个查询?如果where子句中没有大量原始SQL,我如何将其作为一个
ActiveRecord
查询来编写呢?在询问之前一定要先查找,谢谢链接@hd1,但它没有回答我问题的第一部分(重新编写SQL),而且我熟悉嵌套AR查询时提到的技术。我想这可能是一个更好的回答这个问题的地方。