所以我有一个名为@events的集合,我将其定义为
@organization.owned_events.current.reverse
但是,我真正想要做的事情实际上并不是最新的,而是在过去30天内当前或过期的任何内容。我试过了
@organization.owned_events.current-30.days.reverse
但这只是提供了一个空集合。我认为这是因为我真正想要的不是当前的30.days,而是实际的当前和当前的30.days
不知道如何写这个。我可以以某种方式定义另一个术语而不是像net_thirty这样的当前术语并使其等于当前或在过去30天内吗?
答案 0 :(得分: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 ) }