簡體   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