![](/img/trans.png)
[英]Order and sort_by difference in Ruby on Rails ActiveRecord
[英]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.