在Rails视图中排序而不显示重复项

时间:2011-03-09 10:49:00

标签: ruby-on-rails ruby sorting erb

如何在Rails视图中排序但不显示任何重复值?

我有以下ERB代码。

  <% @todos.each do |todo| %>
    <h1><%= todo.due %></h1>
    <br />
    <%= todo.description %><b><%= todo.list %></b>
    <br />
  <% end %>

并输出以下内容:

  

2011-03-09 10:39:00 -0600

     

今天的待办事项我的清单

     

2011-03-09 10:39:00 GMT

     

我今天的另一个待办事项我的清单2

     

2011-03-09 10:39:00 GMT

     

今天的另一个待办事项我的清单

但是,如何在Rails中使用以下格式进行输出?

  

2011-03-09 10:39:00 GMT

     

今天的待办事项我的清单

     

今天的另一个待办事项我的清单

     

我今天的另一个待办事项我的清单2

3 个答案:

答案 0 :(得分:2)

@todos是一个数组,@todos.uniq!删除了重复数据。在Array类中有一个方法sort!,它可以做你想要的。

答案 1 :(得分:2)

您应该使用group_by方法

<% @todos.group_by(&:due).each do |due, todos| %>
  <h1><%= due %></h1>
  <% todos.each do |todo| %>
    <p><%= todo.description %> <b><%= todo.list %></b></p>
  <% end %>
<% end %>

答案 2 :(得分:1)

我会向todo模型添加一个方法,该方法按截止日期返回项目列表:

#models/todo.rb    
def self.get_todo_by_due(due_date)
   return Todo.where(:due => due_date)
end

然后更改视图:

<%distinct_due_dates = Todo.select("DISTINCT(due)") %>

<%distinct_due_dates.each do |item|%>
  <% due_date = item.due %>
  <h1><%= due_date %></h1>
  <% get_todo_by_due(due_date).each do |todo|%>
    <br />
    <%= todo.description %><b><%= todo.list %></b>
    <br />
  <% end%>
<% end%>