正如标题所说,例如,我们有一个库系统,其中有两个表Books
和RentalRecord
,它们具有一对多关系。看起来像
Book1
--name
--RentalRecords
----record11
----record12
Book2
--name
--RentalRecords
----record21
----record22
----record23
----record24
每条记录包含2个时间戳,用于租用日期和返回日期
我想查询一下过去两周没有出租的书。我是Ruby的新手,如果不使用多个查询,我想不出任何方法可以做到这一点。
有时使用两个查询是可行的选择。如果您更喜欢构建单个查询,请使用类似的方法
Book.joins(:rental_records)
.where("max(rental_records.created_at) < ?", 2.weeks.ago)
需要注意的事项:
- 您需要显式地联接所需的表(但要使用关联名称)
- 可以在Rails
where
语句中使用纯字符串 - 您可以将Ruby值绑定到这样一个字符串中的问号
如果您的查询无法控制,或者您不喜欢使用这样的纯SQL字符串,那么请查看gem scroll。它为RubyonRails提供了一个成熟的SQL代数。
HTH