2011-05-25 54 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 %>