轨。如果Else和循环

时间:2011-05-25 11:07:50

标签: ruby-on-rails ruby-on-rails-3 haml

我想在部分内容中执行以下操作:

-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 个答案:

答案 0 :(得分:2)

建议您在控制器中执行排序逻辑并将输出存储在实例变量中。在视图中,只需将显示内容显示为:

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

答案 1 :(得分: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

理想情况下,您可以在控制器中进行此排序,然后只在视图中进行显示。