2017-08-14 6 views
0

は、私はすでに終了しているイベントによって、将来の事象その後、で、私のイベントを並べ替えるしようとしています。私は2つの異なるスコープを使用してみましたが、クラスメソッドを代わりに使用する必要があると考えています。私は文法的にどのようにしてこれらのメソッドを書く必要があるかについて苦労しています。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:「ゼロのために「`アクティブで未定義のメソッド::NilClass」このコードの

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

は、私はエラーを取得していますが、私はそれにいくつかの異なる方法を試してみましたが、できましたそれを書く方法を理解しているようだ。

+0

EVENT_DATEによってなぜだけではなく、オーダー? –

+0

@ReubenMallaby私は非アクティブなイベントが続く昇順でアクティブなイベントで注文したいと思いますので。 – BB123

+0

'sort_by'はブロックに対して1つの引数だけを使います:' Event.all.sort_by {| event | event.active} '(' Event.all.sort_by(&を簡略化することができた:「?」。これは@ilyaによって追加でトリックをしたアクティブ) ' – 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

ありがとう – BB123

+0

まあ@ilyaを発見! –

関連する問題