如何将 axlsx 文件分组以按 org 字母顺序排序

Posted

技术标签:

【中文标题】如何将 axlsx 文件分组以按 org 字母顺序排序【英文标题】:How do I group axlsx file to sort alphabetically by org 【发布时间】:2022-01-15 12:36:01 【问题描述】:

Org 是参加者中嵌套在此包含语句中的列。我想要它,以便它按字母顺序对参加者.org 进行分组

@meetings = NwMeeting.includes(meeting_attendees: [:attendee]).where(show_id: @show.id)
 @meetings.each do |meeting|
      @nw_attendee_meetings = meeting&.meeting_attendees(&:attendee)
      @nw_attendee_meetings.each do |nw_attendee_meeting|
        attendee = nw_attendee_meeting&.attendee
        data = []
        data << attendee&.org
        data << attendee&.name
        data << meeting&.status&.capitalize
        AxlsxTools.add_row(data) (edited)

【问题讨论】:

org 是关联还是属性?如果是一个属性,那么NwMeeting.includes(meeting_attendees: [:attendee]).where(show_id: @show.id).references(meeting_attendees: [:attendee]).order(Attendee.arel_table[:org].asc) 将在您需要加入关联的情况下起作用。还可能想提及您想如何处理空组织。旁注 wayyyyy 安全导航运算符太多。 您希望将组织为 NULL 的会议放在所有记录的前面还是后面? @kevinluo201 在前面! 【参考方案1】:

由于您要列出参加者记录,如果您将查询的“主”模型切换为参加者,可能会更容易一些。加入 NwMeeting 并选择status 列,然后你就可以做ORDER BY attendees.org ASC,NULL 值的记录将默认放在其他记录的前面。

@attendees = Attendee.joins(meeting_attendees: :nw_meeting)
  .select("attendees.*, nw_meetings.status AS meeting_status")
  .where(nw_meetings:  show_id: @show.id )
  .order("attendees.org ASC")
  # .order("attendees.org ASC NULL FIRST") if you use PosgreSQL
@attendees.each do |attendee|
  data = []
  data << attendee.org
  data << attendee.name
  data << attendee.meeting_status&.capitalize
  AxlsxTools.add_row(data)
end

顺便说一句,@engineersmnky 的 Arel 方法更先进,应该也可以:)

【讨论】:

以上是关于如何将 axlsx 文件分组以按 org 字母顺序排序的主要内容,如果未能解决你的问题,请参考以下文章

如何比较包含非英文字符的 unicode 字符串以按字母顺序排序?

以最快的方式重新排序字母以按字典顺序排在第一位

如何对大量 csv 文件进行排序以按特定顺序读取它们?

如何将一系列声音 HTML5 <audio> 声音剪辑排队以按顺序播放?

如何简化 Laravel 查询以按年搜索日期并按月分组

使用 Gatling 将场景模块化以按顺序运行