2017-08-14 78 views
0

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

event.rb

def active 
self.event_date > Time.now 
end 

def inactive 
self.event_date < Time.now 
end 

“活动日期” 是在事件表日期时间列。

events_controller.rb

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

有了这个代码,我得到一个错误:“未定义的方法`不活跃”的零:NilClass”,但我已经尝试了几种不同的方式,并能似乎不知道如何写它。

+0

为什么不EVENT_DATE公正的秩序? –

+0

@ReubenMallaby,因为我想按升序排列活动事件,然后是非活动事件。 – BB123

+0

'sort_by'只为其块使用一个参数:'Event.all.sort_by {| event | event.active}'(可以简化为'Event.all.sort_by(&:active)' – MrYoshiji

回答

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 
+0

@ilya加入了“?”这个技巧,谢谢 – BB123

+0

Well spotted @ilya! –

相关问题