根据子集合的最大值查询记录

时间:2016-05-18 00:16:50

标签: ruby-on-rails ruby

正如标题所说,例如,我们有一个包含两个表BooksRentalRecord的库系统,它们具有一对多的关系。它看起来像

Book1
--name
--RentalRecords
----record11
----record12
Book2
--name
--RentalRecords
----record21
----record22
----record23
----record24

每条记录包含2个时间戳,用于租用日期和返回日期

我想查询过去两周内没有租借过的图书。 我是Ruby的新手,在没有使用多个查询的情况下无法想到任何方法。

1 个答案:

答案 0 :(得分:0)

有时使用两个查询是可行的选择。如果您更喜欢构建单个查询,请使用

Book.joins(:rental_records) .where("max(rental_records.created_at) < ?", 2.weeks.ago)

注意事项:

  • 您需要显式加入所需的表(但通过关联名称)
  • 您可以在Rails where语句中使用纯字符串
  • 您可以将Ruby值绑定到此类字符串中的问号

如果您的查询失控或者您不喜欢使用类似的纯SQL字符串,那么请查看gem squeel。它为Ruby on Rails提供了一个成熟的SQL代数。

HTH