如何操作哈希键将数字月转换为名称

时间:2012-06-17 16:57:01

标签: ruby-on-rails activerecord

我有一个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.....

3 个答案:

答案 0 :(得分:2)

制作一个新的哈希。如果不能,请在当前哈希中创建一个新密钥并删除原始密钥。您不能简单地更改密钥,因为key是块中的局部变量,并且更改它不会影响哈希的内容。

答案 1 :(得分:0)

这个? :

def number_to_month(number)
  (Time.now.beginning_of_year + number.months).strftime("%B")
end

答案 2 :(得分:0)

有一些方法可以生成新的哈希,但我认为您可以在显示之前将字符串转换为视图中的月份名称。使用您在问题块中编写的代码,但将其放在您的视图中。