我有一组散列:

- :name: Ben
  :age: 18
- :name: David
  :age: 19
- :name: Sam
  :age: 18

我需要把他们按age分组,这样他们就可以这样结束了:

18:
- :name: Ben
  :age: 18
- :name: Sam
  :age: 18
19:
- :name: David
  :age: 19

我试着这样做:

array = array.group_by &:age

但我有一个错误:

NoMethodError (undefined method `age' for {:name=>"Ben", :age=>18}:Hash):

我做错了什么?我使用的是Rails 3.0.1和Ruby 1.9.2

推荐答案

&:age意味着group_by方法应该调用数组项上的age方法来获取group by数据.在您的 case 中,这个age方法没有定义在散列项上.

这应该是有效的:

array.group_by { |d| d[:age] }

Ruby-on-rails相关问答推荐

带有rails 7.1的Lightbox2未初始化

将两个日期之间的差值转换为Ruby中的iso8601持续时间(如果需要,还可以使用Rails)

使用Rails和RSpec,有没有办法查看操作真正将您带到哪个页面?

Sidekiq with Rails - 控制台与 rake 任务中的不同 Sidekiq 实例

无法在 Rails 中使用 wkhtmltopdf 写入临时文件

如何在 Rails 中声明动态路由范围/命名空间变量?

在 Datatable Ajax 调用中通过 Ajax 更新 div

在bash中匹配带有空格字符的字符串

Rails 连接并包含连接表中的列

rails 3,简单数组的Kaminari分页

查找日期时间与今天匹配的记录 - Ruby on Rails

价格字段的字符串、小数或浮点数据类型?

使用 Devise 令牌登录,这是内置的吗?

更改 form_for rails 3.1 生成的 html 表单 ID

如何在where子句中组合两个条件?

什么是 Ruby 中的 Python 文档字符串?

将根 url 重定向到 Rails 应用程序中的其他位置

从 Rails 中的控制器调用辅助方法时出现未定义的方法

在 Ruby on Rails 中的控制器中获取 URL 的锚部分

在 Rails 3 中设置会话超时