我正在尝试根据关联查询项目,但对如何用词组查询的日期部分感到有些困惑。日期以“ 2018-12-25”之类的文本格式存储。
year = params[:ridden_in]
@items = Item.joins(:cycle).where(cycles: { (:date.to_date).year: year })
有人能帮我解决问题吗?
答案 0 :(得分:0)
最简单的方法是使用SQL函数。您可以尝试将SQL隐藏在AREL后面,但是很快就会变得一团糟。
一种方法是直接字符串操作:
Item.joins(:cycle).where('substring(cycles."date" from 1 for 4) = ?', year)
或更具有前瞻性,因为您的日期最终将成为真实日期:
Item.joins(:cycle).where('extract(year from cycles."date"::date) = ?', year)
Item.joins(:cycle).where('extract(year from cast(cycles."date" as date)) = ?', year)
这两个都假设您的date
列确实遵循ISO8601日期格式。
如果您经常这样做,则可以在cycles.date
上添加部分索引(即,对最终使用的任何函数的结果进行索引)。