Ruby on rails 如何按顺序排列组内的记录

Ruby on rails 如何按顺序排列组内的记录,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个收到的邮件列表。它们按“发件人”字段分组,并按创建时间排序 它们在“业务展示”视图中显示如下: From: Tom 10pm Message7 8pm Message4 6pm Message2 From: Sara 9pm Message6 7pm Message3 5pm Message1 From: John 8pm Message5 在业务控制器中,我有: @messages = @business.short_messages.newest.group_by &:

我有一个收到的邮件列表。它们按“发件人”字段分组,并按创建时间排序

它们在“业务展示”视图中显示如下:

From: Tom
10pm Message7
8pm Message4
6pm Message2

From: Sara
9pm Message6
7pm Message3
5pm Message1

From: John
8pm Message5
在业务控制器中,我有:

@messages = @business.short_messages.newest.group_by &:from
在短消息模型中,我具有以下范围:

scope :newest, order: "created_at desc"
我认为:

<% @messages.each do |from, message| %>
 <p><%= from %></p>
 <% message.each do |msg| %>
  <p><%= msg.created_at %> <%= msg.content %></p>
 <% end %>
<% end %>

既然您希望它升序,只需将范围更改为

scope :newest, order: "created_at asc"

这会有用的

我相信您无法在单个数据库请求中完成此操作,因此您需要在以后手动完成此操作。试试这个:

@messages = @business.short_messages.newest.group_by &:from
@messages.each_pair { |k,v| v.sort!{|a,b| a.created_at <=> b.created_at} }
@messages=@business.short\u messages.latest.group\u by&:from
@messages.each|u pair{k,v|v.sort!{a,b|a.created_at b.created_at}

这段代码以键/值对的形式在散列中循环,并对值(消息)进行排序。排序直接应用于散列中的引用值对象(请注意,
sort!
)。

在视图中使用
reverse\u each
反向循环数组

<% @messages.each do |from, message| %>
 <p><%= from %></p>
 <% message.reverse_each do |msg| %>
  <p><%= msg.created_at %> <%= msg.content %></p>
 <% end %>
<% end %>


既然你想让它升序,为什么不干脆
范围:最新,顺序:“在ASC创建”
?@KappaNossi我认为组应该按顺序
ASC
排列,而组中的行应该按顺序
DESC
排列在同一字段上,否则我看不出问题应该在哪里。正确。我希望首先显示带有最新消息的对话,但在该对话中应最后显示。我希望首先显示带有最新消息的对话,但在该对话中应最后显示
<% @messages.each do |from, message| %>
 <p><%= from %></p>
 <% message.reverse_each do |msg| %>
  <p><%= msg.created_at %> <%= msg.content %></p>
 <% end %>
<% end %>