Сортировка в представлениях Rails без отображения дубликатов - PullRequest
1 голос
/ 09 марта 2011

Как сортировать в представлении 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

Моя Todo на сегодня Мой список

2011-03-09 10:39:00 GMT

Мой еще один Todo на сегодня Мой список 2

2011-03-09 10:39:00 GMT

И еще один Todo на сегодня Мой список

Однако как мне сделать так, чтобы он выводился в следующем формате в Rails?

2011-03-09 10:39:00 GMT

Мой Todo на сегодня Мой список

И еще одна Todo на сегодня Мой список

Мой еще один Todo на сегодня Мой список 2

Ответы [ 3 ]

2 голосов
/ 09 марта 2011

Вы должны использовать 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 голосов
/ 09 марта 2011

@todos является массивом, а @todos.uniq! удаляет дубликаты. В классе Array есть метод sort! , который должен делать то, что вы ищете.

1 голос
/ 09 марта 2011

Я бы добавил метод todo model, который возвращает список элементов к дате исполнения:

#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%>
...