首页 > 解决方案 > 两列的导轨组合

问题描述

在我的 Ruby on Rails 项目中,我有一个Message具有directionfromto列的模型。direction可以是“传入”或“传出”。

我想按消息fromto字段将消息分组到对话中。假设我的数据库中有以下消息:

{id: 1, direction: 'incoming', from: '10000', to: '2222'}
{id: 2, direction: 'outgoing', from: '2222', to: '10000'}
{id: 3, direction: 'incoming', from: '10001', to: '3333'}
{id: 4, direction: 'outgoing', from: '3333', to: '10001'}

最后我想要一个看起来像的哈希{['10000','2222']=>[message with id 1, message with id 2], ['10001','3333']=>[message with id 3, message with id 4]}

我已经尝试过Message.all.group_by{|m| [m.from, m.to]}了,但这会给我一个带有 keys 的哈希值[['10000', '2222'], ['2222','10000'],['10001', '3333'], ['3333','10001']]。在这里,我有重复的键,即使它们的顺序不同。

谢谢!

标签: ruby-on-railsarraysactiverecord

解决方案


试试这个,messages你的消息在哪里。

messages.group_by do |m|
  m.direction == "incoming" ? [m.from, m.to] : [m.to, m.from]
end

推荐阅读