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