Ruby on rails 铁路范围“;“在”内到期;

Ruby on rails 铁路范围“;“在”内到期;,ruby-on-rails,scope,Ruby On Rails,Scope,嘿,伙计们。我有一个型号,Item,在+100天创建的中设置为“过期”。我正在尝试创建一个作用域,该作用域将返回在提供的时间内过期的项目,例如10.days 到目前为止,我有: scope :expires_within, lambda {|time| where("created_at > ?", time)} 这样我最终可以做一些事情,比如: Item.expires_within(10.days) 它将返回10天内过期的项目集合 这是不对的,我只是想要一个我应该拥有的骨架。我不知

嘿,伙计们。我有一个型号,
Item
,在+100天创建的
中设置为“过期”。我正在尝试创建一个作用域,该作用域将返回在提供的时间内过期的项目,例如
10.days

到目前为止,我有:

scope :expires_within, lambda {|time| where("created_at > ?", time)}
这样我最终可以做一些事情,比如:

Item.expires_within(10.days)
它将返回10天内过期的项目集合

这是不对的,我只是想要一个我应该拥有的骨架。我不知道是否可以通过作用域来实现这一点。在我看来,如果表中有一个名为
expires\u at
的列,我可能会这样做,但问题是我不想创建这样一个列,因为我希望在+100.days时创建
的过期时间是灵活的


我只是想看看,如果没有这样一个专栏,它是否可能实现,或者如果它可以实现,但没有范围,我也想听听这种可能性。如果没有,我将继续添加它。

您可以为

scope :expires_within_10_days, lambda { where('created at > ?', 90.days.ago) }
…将获取90天前创建的所有项目,这意味着它们将在10天内过期。添加另一个条件以排除已过期的项目


更新:将示例切换到范围,而不是常规AR查询…

从现在开始执行此操作:

10.days.from_now
或动态:

scope :expires_within, lambda {|time| where("created_at > ?", time.from_now)}

我已经想出了一个我相信的解决办法。我将继续测试它

scope :expires_within, lambda {|time| where("created_at < ?", time.from_now - 100.days)}
由于我想确定某项内容是否在未来某个时间(例如10天)内过期,因此我将其添加到左侧:

Time.now + time > created_at + 100.days
记住,100.5天是一个项目在到期前必须生存的时间

最后,我通过从另一端减去
100天来解决
处创建的\u的问题,这样它本身就是,因为这是sql查询所要求的:

created_at < (Time.now + time) - 100.days

这看起来很有希望。你能把它改写一下,这样就可以输入10.5天吗?哦,就100天-10天。谢谢,我会试试这个。这里有点可疑:
创建时间>[10天后]
created_at < (Time.now + time) - 100.days
created_at < time.from_now - 100.days
scope :expires_within, lambda {|time| where("created_at BETWEEN ? AND ?", 100.days.ago, time.from_now - 100.days)}