如何在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
答案 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%>