【发布时间】:2015-12-11 22:19:33
【问题描述】:
假设我有一个包含多个期间的合同模型(用于衡量合同的持续时间和任何续订期)。合同中的每个期间都有一个 end_date。我正在使用 Rails Admin,它为我提供了使用我在 Contract 模型和 Rails Admin 配置中定义的任何范围的能力列表 Contracts。我想创建一个 :expired 范围,其中列出了合同最后一个期间的 end_date 早于今天日期的所有合同。简单地说,我想要一个只列出过期合同的范围。
我试过这个:
scope :expired, -> { joins(:periods).where('periods.end_date < ?', Date.today) }
这不起作用,因为如果合同的任何期限(而不仅仅是最后一个期限)已过期,它会给出误报显示合同已过期。
对于它的价值,我已经有一个 current_end_date 实例方法,它可以通过本质上为我提供合同的当前结束日期:
periods.last.end_date
但我不知道如何在范围内使用类似的东西。
【问题讨论】:
-
您可能需要将此查询分成两部分;获取每个合同的最新期间的子查询,以及在子查询找到的期间中查找过期的 end_dates 的查询。
标签: ruby-on-rails ruby scope rails-admin