我试图使用从一个has_many:through关系的值来检索作者列表,但我的逻辑是失败的。
实现这一目标的最佳方法是什么
当前尝试此操作未成功
start_date = '01/01/0001'.to_date.beginning_of_day
end_date = '01/01/2020'.to_date.end_of_day
Author.includes(:books).where("date(books.release_date) BETWEEN ? AND ?", start_date, end_date)
我可以通过
检索这些书Book.where("date(release_date) BETWEEN ? AND ?", start_date, end_date)
但是想让上面的查询工作
您的查询可能会失败,因为您正在使用includes
与SQL字符串片段。Rails不使用SQL字符串推断includes
上的任何关联,因此引用必须结合使用:
Author.includes(:books).references(:books).where("date(books.release_date) BETWEEN ? AND ?", start_date, end_date)
或者,您可以使用查询DSL来构造相同的where子句,Rails将能够推断出关联:
Author.includes(:books).where({ books: { release_date: 1.year.ago..Time.now } })
如果您只是试图过滤到author
s列表,并且根本不需要book
s,我建议使用子查询:
author_ids = Book.where("date(release_date) BETWEEN ? AND ?", start_date, end_date).select(:author_id)
Author.where(id: author_ids)