2017-08-14 77 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! –

相關問題