0

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

3 回答 3

2

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

于 2012-06-17T17:00:03.890 回答
0

这个 ?:

def number_to_month(number)
  (Time.now.beginning_of_year + number.months).strftime("%B")
end
于 2012-06-17T17:05:07.273 回答
0

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

于 2012-06-18T15:20:02.703 回答