【问题标题】:Rails: Order dom elements created by two different each loopsRails:对由两个不同的 each 循环创建的 dom 元素进行排序
【发布时间】:2025-12-31 07:55:06
【问题描述】:

week 循环中有两个 each 循环,static_events, loop_events 创建按时间排序的链接。 问题是当第一个循环结束时,第二个每个循环在第一个循环之后创建元素,并且顺序中断。

<% @week.each do |day| %>

   <% @static_events.each do |event| %>
      <%= link_to event.start_time.strftime('%H:%M'), event_path(event.id) %>
   <% end %>

   <% @loop_events.each do |event| %>
      <%= link_to event.start_time.strftime('%H:%M'), event_path(event.id) %>
   <% end %>

<% end %>

结果大致如下:

01:00     # =>  @static_events => index 1
03:00     # =>  @static_events => index 2
04:00     # =>  @static_events => index 3
02:00     # =>  @loop_events => index 1

我需要这个结果:

01:00     # =>  @static_events => index 1
02:00     # =>  @loop_events => index 1
03:00     # =>  @static_events => index 2
04:00     # =>  @static_events => index 3

如何按时间对每个循环进行排序/排序,并达到上述结果?

【问题讨论】:

    标签: ruby-on-rails arrays ruby loops


    【解决方案1】:

    好吧,你可以合并它们(数组,当然不是循环)并按时间排序:

    <% [@static_events, @loop_events].flatten.sort_by(&:start_time).each do |event| %>
      <%= link_to event.start_time.strftime('%H:%M'), event_path(event.id) %>
    <% end %>
    

    【讨论】:

    • 也可以考虑在控制器中这样做
    • 为什么不用(a + b).sort_by 而不是[ a, b ].flatten.sort_by
    最近更新 更多