将mysql2类型转换为数组并在ruby中对其进行排序

时间:2012-10-18 17:52:00

标签: mysql ruby-on-rails ruby arrays ruby-on-rails-3

我的ruby文件中有一个查询:

@mastertest = connection.execute("select code_ver,date from mastertest")

我打印查询结果如下:

@mastertest.each do |row|
  puts row[0] : row[1]
end

这将打印所有code_ver和'日期',如下所示

2.0 : 2012/12/10
3.1 : 2012/11/03
2.5 : 2012/07/08
1.8 : 2012/12/11
2.5 : 2012/03/01

现在我想根据我的code_ver对这个数组进行排序,但问题是ruby不认为这是一个数组,它说它是一些mysql2类型。

如何进一步处理?我想要将这个东西转换成二维数组,或者我想根据row[0]对它进行排序。

1 个答案:

答案 0 :(得分:8)

您在@mastertest中获取了MySQL结果集对象,结果集不是数组。

如果您使用的是mysql2,那么您应该拥有Mysql2::ResultEnumerable,因此它有to_a方法:

@mastertest.to_a.sort { ... }

如果您使用的是mysql gem,那么您应该拥有Mysql::Result,并且必须手动将@mastertest转换为数组:

a = [ ]
@mastertest.each { |r| a.push(...) }
a.sort { ... }

或者你可以简单地让数据库进行排序:

@mastertest = connection.execute('select code_ver, date from mastertest order by code_ver')