如何将 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 字符串以按字母顺序排序?