![](/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.