Rails 4:按2种不同的范围/类方法排序

时间:2017-08-14 14:09:48

标签: ruby-on-rails sorting ruby-on-rails-4

我正在尝试通过未来事件然后按已经结束的事件对事件进行排序。我尝试使用2个不同的范围,但我现在想,我可能需要使用类方法。我只是在语法上如何努力编写这些方法。

event.rb

def active
 self.event_date > Time.now
end

def inactive
 self.event_date < Time.now
end

“event_date”是事件表中的日期时间列。

events_controller.rb

def index
 @events = Event.all.sort_by {|a,b| [a.active, b.inactive]}
end

使用这段代码,我收到一个错误:“未定义的方法`非活动'为nil:NilClass”但我尝试了几种不同的方法,似乎无法弄清楚如何编写它。

1 个答案:

答案 0 :(得分:3)

您的方法将在运行数据库后执行,并且速度很慢。

这可能会有所改善:

模型

scope :active, -> { where('event_date >= ?', Time.now) }
scope :inactive, -> { where('event_date < ?', Time.now) }

控制器

@active_events = Event.active
@inactive_events = Event.inactive

@events = @active_events + @inactive_events