1

尝试为此开发一个范围:next将返回下一个即将到来的“事件”(或其他),因为模型具有end_at

这将带来所有即将发生的事件:

scope :upcoming, lambda { where("end_at >= ?", Date.today).order("start_at") }

因此认为以下将返回该有序列表中的第一个事件:

scope :next,     lambda { where("end_at >= ?", Date.today).order("start_at").first }

但相反,它返回所有事件!?!等同于Event.all

无论如何,构建这个范围的正确方法是什么?

4

2 回答 2

2

假设您的upcoming范围实际上正在工作,您可以从next范围中调用它:

scope :next, lambda { upcoming.first }

我不确定这是否真的有效,但我建议将其更改为类方法:

def self.next
  upcoming.first
end
于 2013-01-18T20:19:17.700 回答
1

您可以编写一个类方法并使用它来代替..

def self.next
    where("end at >= ?", Date.today).order("start_at").first
end
于 2013-01-18T20:20:39.597 回答