Rails中的group_by如何使用两个或更多属性进行分组?

55

我有一个作为数组返回的@bunch模型集合

每个模型都具有属性 - commentable_idcommentable_type(多态关联)

我想按评论分组模型,但如果这样做,

@bunch.group_by(&:commentable)

它还从数据库中获取了可评论的内容,这是不必要的。

我可以执行@bunch.group_by(&:commentable_id),但这会导致一些混淆,因为可能有多种类型的可评论模型。

有没有一种方法可以按commentable_idcommentable_type进行group_by

1个回答

112

为什么不这样做:

@bunch.group_by{|e| [e.commentable_id, e.commentable_type]}

1
谢谢 - 但我如何从具有两个键的哈希中读取值呢? - Qasim
11
这行代码是Ruby语言的语法,意思是对一个键值对(id和type)进行迭代,并将其对应的value传递给代码块。 - Frederik Spang
@FrederikSpang,如果进一步深入,获取相关模型值的最佳方法是什么?例如评论的作者名称或评论创建日期等。 - W.M.
1
注意,您还可以展开键的数组以执行与答案中相同的操作。[{id: 'maisy', type: 'cat'}].group_by { |x| x.values_at(*%i[id type]) }。在大多数情况下,这些字面值将成为良好的语义变量,因此更容易阅读。 - J.M. Janzen
只是一点提示:group_by 是 Enumerable 的一部分,但可以在 ActiveRecord::Relation 对象上调用,因为 Relation 与 Enumerable 混合在一起。 - Daniel Viglione

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接