0

所以我有一个名为@events 的集合,我将其定义为

@organization.owned_events.current.reverse

但是,我实际上想要做的实际上不是最新的,而是过去 30 天内最新或过期的任何东西。我试过了

@organization.owned_events.current-30.days.reverse

但这只是提供了一个空集合。我认为这是因为我真正想要的不是 current-30.days,而是实际的 current-and current-30.days

虽然不知道怎么写。我可以以某种方式定义另一个术语而不是像 net_thirty 这样的当前术语,并使其等于当前或在过去 30 天内吗?

4

1 回答 1

1

在您的事件模型中,您可以执行以下操作:

scope :from, ->(duration){ where('your_datetime_field_here > ?', Time.zone.now - duration ) }

由于您想按日期或日期时间字段过滤,如果您想按日期字段过滤,上一个选项适用于日期时间字段:

scope :from, ->(duration){ where('your_date_field_here > ?', Time.zone.today - duration ) }

->(){}是您传递给范围的块。

您可以像这样使用这些范围:

any_events.from(30.days)

在你的情况下:

@organization.owned_events.from(30.days)

您可能还想过滤今天之后的事件:

scope :from, ->(duration){ where('your_date_field_here BETWEEN ? AND ? ', Time.zone.today - duration, Time.zone.today ) }
于 2013-07-28T00:00:13.773 回答