我有一个AR查询,它返回每月事件的哈希值,按月排序
o.events.group("to_char(date,'MM')").order("to_char(date,'MM')").size()
我在这个查询中使用数字月份,因为这是我能找到以正确顺序获取内容的最佳方式,而且我还需要对哈希进行一些其他操作。
在显示结果之前,我需要将数字月份转换回单词。我在查询的末尾添加了以下内容
.each_key{ |key| Date::MONTHNAMES[key] }
但是我得到了
TypeError: can't convert String into Integer.
所以我试过
.each_key{ |key| Date::MONTHNAMES[key.to_i] }
但这几个月仍为数字形式
{"01"=>4, "02"=>3.....
我如何操纵此哈希来获取
{"January"=>4, "February"=>3.....
答案 0 :(得分:2)
制作一个新的哈希。如果不能,请在当前哈希中创建一个新密钥并删除原始密钥。您不能简单地更改密钥,因为key
是块中的局部变量,并且更改它不会影响哈希的内容。
答案 1 :(得分:0)
def number_to_month(number)
(Time.now.beginning_of_year + number.months).strftime("%B")
end
答案 2 :(得分:0)
有一些方法可以生成新的哈希,但我认为您可以在显示之前将字符串转换为视图中的月份名称。使用您在问题块中编写的代码,但将其放在您的视图中。