2016-03-14 62 views
2

問題:如何在兩個不同的表中顯示具有start_time<time.now & start_time>time.now的活動?區分未來活動中的過往活動

scaffold event start_time:datetime title

Events_controller:

def index 
    @event = Event.all 
end 

index.html.haml:

%table 
    %thead 
     %tr 
     %th Start_time 
     %th Title 

    %tbody 
     - @events.each do |event| 
     %tr 
      %td= event.start_time 
      %td= event.title 

謝謝:)

回答

1

這可能是一個可能的解決方案。有兩種查詢...

控制器

def index 
    @upcoming_events = Event.where("start_time > ?", Time.now) 
    @past_events = Event.where("start_time < ?", Time.now) 
end 

查看

%table 
     %thead 
      %tr 
      %th Start_time 
      %th Title 

     %tbody 
      - @upcoming_events.each do |event| 
      %tr 
       %td= event.start_time 
       %td= event.title 


%table 
    %thead 
     %tr 
     %th Start_time 
     %th Title 

    %tbody 
     - @past_events.each do |event| 
     %tr 
      %td= event.start_time 
      %td= event.title 
0

如果你沒有理會性能和你可以使用2個SQL查詢,然後我會建議這樣的:

def index 
    @past_events = Event.where('start_time < ?', Time.zone.now) 
    @future_events = Event.where('start_time > ?', Time.zone.now) 
end 
+1

可能想讓其中一個有'=',或者你可能會忽略現在開始的東西。 – tadman

2

你可能簡單地定義爲scopes過去和未來的事件:

class Event < ActiveRecord::Base 
    scope :in_the_past, { where('start_time < ?', Time.now } 
    scope :in_the_future, { where('start_time > ?', Time.now } 
end 

那麼你的意見會:

_events_table.html.haml

%table 
    %thead 
    %tr 
     %th Start_time 
     %th Title 

    %tbody 
    - events.find_each do |event| 
     %tr 
     %td= event.start_time 
     %td= event.title 

index.html.haml

/ Past events 
= render 'events_table', events: Event.in_the_past 
/Future events 
= render 'events_table', events: Event.in_the_future 
+0

正在使用範圍更好的性能? – makerbreaker

+0

不是,但它是可重複使用的! –

2

使用Enumerable#partition劃分您的活動變成水桶。

past, future = Event.all.partition { |e| e.start_time < Time.now }