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

新しいハッシュを生成する方法はありますが、文字列を表示する直前に、ビューで文字列を月の名前に変換するだけでよいと思います。質問のブロック内に既に記述したコードを使用しますが、それをビューに入れます。

于 2012-06-18T15:20:02.703 に答える
0

これ ?:

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