0

datetimeというタイトルのフィールドを持つイベントモーダルがありますscheduled_time。特定の形式 (「mon」、「tue」など) の曜日名をキーとし、その日に発生したイベントの数を値とするハッシュを作成する必要があります。これどうやってするの?

{
    'mon' => 2,
    'tue' => 4,
    'wed' => 3,
    'thu' => 5,
    'fri' => 12,
    'sat' => 11,
    'sun' => 7,
}

Rails 3.2.0 と Ruby 1.9.2 を使用しています

4

1 に答える 1

0

最も簡単なのはcount:groupオプションを使用することです。

h = Model.count(:group => %q{to_char(scheduled_time, 'dy')})

GROUP BYする特定の関数は、通常どおり、データベースによって異なります。上記のアプローチはPostgreSQLで機能し、to_charMySQLでは使用できます。date_formatlower

h = Model.count(:group => %q{lower(date_format(scheduled_time, '%a'))})

SQLiteの場合、おそらくフォーマットで使用strftimeして%wから、数値を手動で文字列に変換します。

を使用すると、穴のあるハッシュが得られることに注意してくださいModel.count(:group => ...)。その日のテーブルにエントリがない場合、ハッシュにはそのためのキーがありません。常に7つのキーが本当に必要な場合は、ゼロを使用してハッシュを作成します。

h = { 'mon' => 0, 'tue' => 0, ... }

count次に、結果をそれにマージします。

h.merge!(Model.count(:group => ...))
于 2012-05-30T03:47:45.147 に答える