2011-05-25 55 views
0

我想要做的部分如下:導軌。如果else和循環

-if (session[:sort] == "up") 
    - event.days.sort_by{|t| - t.created_at.to_i}.each do |day| 
    = day.title 
    = day.etc 
-else 
    - event.days.sort_by{|t| - t.created_at.to_i}.reverse.each do |day| 
    = day.title 
    = day.etc 

但我不想重複

= day.title 
= day.etc 

我想:

-if (session[:sort] == "up") 
    - event.days.sort_by{|t| - t.created_at.to_i}.each do |day| 
-else 
    - event.days.sort_by{|t| - t.created_at.to_i}.reverse.each do |day| 
= day.title 
= day.etc 

但它不沒有工作。也許我可以用三元運算符以某種方式做到這一點。

回答

2

對事件進行排序,只有在滿足所需條件時纔會反轉它們,然後將它們打印出來。

- sorted_events = event.days.sort_by{|t| - t.created_at.to_i} 
- sorted_events = sorted_events.reverse unless session[:sort] == "up" 
- sorted_events.each do |day| 
    = day.title 
    = day.etc 

理想情況下,你會在控制器中做這種排序,然後只是在視圖中顯示。

+0

謝謝,也把代碼移到控制器。 – user647345 2011-05-25 11:58:23

2

建議您在控制器中執行排序邏輯並將輸出存儲在實例變量中。在視圖中,只是將顯示內容顯示爲:

<% @results.each do |result| %> 
<%= result.title %> 
<%= result.etc %> 
<% end %>