ruby-on-rails - 如何合并不同的键?
问题描述
我有两个模型类
class Book
# attributes
# title
# status
# author_id
belongs_to :author
enum status: %w[pending published progress]
end
class Author
# attributes
has_many :books
end
我有一个返回书籍列表的活动记录
名单
[<#Book><#Book><#Book>]
我使用此功能对它们进行分组
def group_by_gender_and_status
books.group_by { |book| book.author.gender }
.transform_values { |books| books.group_by(&:status).transform_values(&:count) }
end
结果是
{
"female"=>{"progress"=>2, "pending"=>1, "published"=>2},
"male"=>{"published"=>3, "pending"=>4, "progress"=>4}
}
如何合并progress
和pending
命名密钥pending
?所以看起来像这样
{
"female"=>{"pending"=>3, "published"=>2 },
"male"=>{"pending"=>8, "published"=>3, }
}
出于某种原因,我更喜欢使用该group_by
方法而不是SQL。group
谢谢
解决方案
def group_by_gender_and_status
books.group_by { |book| book.author.gender }.
transform_values do |books|
books.group_by { |book| book.status == 'progress' ? 'pending' : book.status }.
transform_values(&:count)
end
end
推荐阅读
- firebase - 即使在验证电子邮件后,FirebaseUser isEmailVerified 也始终返回 false
- elasticsearch - 是否可以一次将多个事件作为事务发布到 ElasticSearch?那么如果一个发布失败,ES 数据库会回滚吗?
- kotlin - 如何在 Gradle 中更改 Kotlin 项目的源文件夹
- python - sort_values 覆盖 style.format
- python - 在嵌入 Discord.py 中发送文件
- python - 如何从文件中获取名称并添加到路径
- microsoft-graph-api - 我可以了解 Microsoft Teams 频道成员更改事件吗?
- go - Golang 汇编中的快速转置字节矩阵 [][]byte
- python - 尝试针对表格测试输入时出现此错误
- css - 如何在每个(按钮、部分、正文)案例中显示带有浅灰色背景的加载程序