【问题标题】:How do I group axlsx file to sort alphabetically by org如何将 axlsx 文件分组以按 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 在前面!

标签: ruby-on-rails ruby group-by


【解决方案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 方法更先进,应该也可以:)

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2020-03-29
    • 2018-01-28
    • 1970-01-01
    • 2013-03-18
    相关资源
    最近更新 更多