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

时间:2016-08-29 19:22:09

标签: mysql ruby sorting date

我有一个有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的输出是

[#<User id: 10, login: "my.name", hashed_password: "", date: "2016-08-29">]

1 个答案:

答案 0 :(得分:1)

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

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

说明:

您看到p task的输出:

[#<User id: 10, login: "my.name", hashed_password: "", date: "2016-08-29">]

这意味着这是一个元素数组。注意括号[ ]。因此,在这种情况下您需要做的是task.first,它将返回:

 #<User id: 10, login: "my.name", hashed_password: "", date: "2016-08-29">

从那里你可以通过一个键来访问元素的值,就像你想要的那样:

task.first[:date]