基于关联的Rails

时间:2018-12-27 21:23:41

标签: ruby-on-rails postgresql activerecord associations rails-activerecord

我正在尝试根据关联查询项目,但对如何用词组查询的日期部分感到有些困惑。日期以“ 2018-12-25”之类的文本格式存储。

year = params[:ridden_in]
@items = Item.joins(:cycle).where(cycles: { (:date.to_date).year: year })

有人能帮我解决问题吗?

1 个答案:

答案 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上添加部分索引(即,对最终使用的任何函数的结果进行索引)。