将Rails中的日期与关联模型进行比较,而不使用.select

时间:2017-12-15 14:30:51

标签: ruby-on-rails

很抱歉,如果已在其他地方发布,则不确定要搜索的内容。

我的此查询目前正在使用.select,但必须有更好的方法可以在不使用可怕的.select的情况下获得相同的结果吗?任务是:找到在班次应该开始的6小时内创建的所有班次取消:

ShiftCancellation.select{|c| c.created_at > c.shift.date_time - 6.hours}

ShiftCancellation belongs_to :shift,反之亦然。

我在使用Postgres,因此SQL独有的查询将无效。

2 个答案:

答案 0 :(得分:0)

您可以加入其他表格以允许查询所有字段,但我不确定获取日期的最佳方式是什么 - 6小时是。我认为DATE_SUB可能就是您所需要的:

ShiftCancellation.joins(:shift).where("shift_cancellations.created_at > DATE_SUB(shifts.date_time, INTERVAL 6 HOUR)"}

这里有一些例子:https://stackoverflow.com/a/1888569/385532

答案 1 :(得分:0)

解决了它。

ShiftCancellation.joins(:shift).where("shift_cancellations.created_at > (shifts.date_time - interval '6 hours')")