1

created_at属性を使用してモデルレコードの範囲を選択したいので、このクエリを試しました

Client.where('created_at BETWEEN ? AND ?', 30.days.from_now, DateTime.now.utc)

ただし、空の配列を返します。

1.9.3-p125 :029 > Client.where('created_at BETWEEN ? AND ?', 30.days.from_now, DateTime.now.utc)
  Posting Load (1.0ms)  SELECT `clients`.* FROM `clients` WHERE (created_at BETWEEN '2012-09-22 16:30:04' AND '2012-08-23')
 => []

また、メソッドを使用してこのレコードを配列の配列にグループ化したいのです.day。つまり、10個のレコードがある場合、同じ日に作成したレコードを別々の配列にグループ化したいのです。

4

2 に答える 2

5
Client.
  where(created_at: 30.days.ago..Date.current).
  group_by{|u| u.created_at.to_date}

結果が必要な値の配列を渡すことができwhereます(包括的範囲と排他的範囲については、との違いを調べてください.....

さらに、を呼び出すことで結果をグループ化できます。これは、私の例のようにgroup_by、呼び出すメソッド、つまり.group_by(&:created_at)ブロックを取ります。結果を特定のタイムスタンプではなく日付でグループ化する必要があるため、完全なブロックを使用しました。完全な日付ではなく、実際にその月の日が必要な場合は、に電話することもできます.group_by{ |u| u.created_at.day}が、日付の方が便利なようです。

于 2012-08-23T16:42:12.420 に答える
1

私はあなたが望むものは次のとおりだと信じています(前と今からのメモ):

Client.where('created_at BETWEEN ? AND ?', 30.days.ago.utc, Time.now.utc)
于 2012-08-23T16:38:12.640 に答える