根据属性的存在对数据进行分组

时间:2015-05-15 17:13:04

标签: ruby-on-rails postgresql

这些是我的模特。

class User < ActiveRecord::Base
 has_many :messages
end

class Message < ActiveRecord::Base
  belongs_to :user
  belongs_to :vendor
end

class Vendor < ActiveRecord::Base
end

场景是消息可能有也可能没有vendor_id。 我想要做的是,有一个方法classified_messages,它将获取消息,但分为两类:有供应商的消息,以及没有供应商的消息,如下所示:

user = User.first
user.classified_messages
# Expected
{
  general: [], # array of messages which do not have vendor_id
  specific: [] # array of messages which has vendor_id
}

我尝试过但没有工作:

user.messages.group_by{ |m| m.vendor_id.present? ? 'specific' : 'general' }

如何使用group_by实现此目的?或使用group_by无法实现?

1 个答案:

答案 0 :(得分:0)

结果是什么?它对我来说很简单,可以对id字段的偶数/奇数进行简单的分割。

> ApiUser.all.group_by{|e| e.id.even? ? :even : :odd}.keys
=> [:even, :odd]
> ApiUser.all.group_by{|e| e.id.even? ? :even : :odd}.values.map(&:size)
=> [2, 4]