Ruby sort_by用于MySQL返回的数组,日期格式为字符串

我有一个有task表的数据库。 在该表中,有一个date列。 这些日期格式化为字符串,它们不是Date

我正试图按日期对这些任务进行排序。 我已经有一系列名为tasks 。 我正在尝试使用以下代码将其替换为名为tasksByDate的已排序数组。

 tasksByDate = tasks.sort_by do |task| task[:date].to_date end 

我得到的错误是:

 TypeError: no implicit conversion of Symbol into Integer 

我也试过没有to_date只是为了看看它是否会在没有日期的情况下对其进行排序,而只是一个字符串。

date字段的格式为字符串,如2016-08-29 。 我在代码中的其他地方使用了to_date方法,它工作得很好,所以我并不认为这是问题所在。


编辑1

我已经检查过任务实际上包含一个日期,并且它的格式与解释相同。

p task.class的输出是Array

编辑2

p task的输出是

 [#] 

这些元素似乎嵌套得比您预期的要深。 将您的代码更改为:

 # use '{ }' instead of 'do end' for a single-line blocks tasksByDate = tasks.sort_by { |task| task.first[:date].to_date } 

说明:

您看到的p task输出:

 [#] 

这意味着这是一个元素数组。 注意括号括号[ ] 。 所以你在这种情况下要做的就是task.first ,它会返回:

  # 

从那里你应该能够通过键访问元素的值,就像你想要的那样:

 task.first[:date]