繁体   English   中英

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

[英]Ruby sort_by for arrays returned by MySQL, date formatted as string

我有一个带有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">]

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

# 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM