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]