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

Pi *_*rse 5 ruby mysql arrays ruby-on-rails ruby-on-rails-3

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

@mastertest = connection.execute("select code_ver,date from mastertest")
Run Code Online (Sandbox Code Playgroud)

我打印查询的结果如下:

@mastertest.each do |row|
  puts row[0] : row[1]
end
Run Code Online (Sandbox Code Playgroud)

这将打印所有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
Run Code Online (Sandbox Code Playgroud)

现在我想基于我对这个数组进行排序code_ver,但问题是ruby并不认为这是一个数组,它说它是一些mysql2类型.

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

mu *_*ort 8

您正在获取MySQL结果集对象,@mastertest结果集不是数组.

如果你正在使用mysql2,那么你应该有一个Mysql2::Result,Enumerable所以它有一个to_a方法:

@mastertest.to_a.sort { ... }
Run Code Online (Sandbox Code Playgroud)

如果您正在使用mysqlgem,那么您应该拥有一个Mysql::Result并且您必须@mastertest手动转换为数组:

a = [ ]
@mastertest.each { |r| a.push(...) }
a.sort { ... }
Run Code Online (Sandbox Code Playgroud)

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

@mastertest = connection.execute('select code_ver, date from mastertest order by code_ver')
Run Code Online (Sandbox Code Playgroud)