1

datamapperを使用して、月と年で日付フィールドをどのようにフィルタリングしますか?

今日の日付ですべてのレコードをフィルタリングできます。

:date => Date.today

しかし、2012年12月からすべてのレコードを返すためのエレガントなソリューションがあるかどうか興味があります。

posts.all
+----+------------+
| id | date       |
+----+------------+
| 1  | 2009-10-20 |
| 2  | 2012-11-18 |
| 3  | 2012-12-10 |
| 4  | 2012-12-14 |
+----+------------+

posts.all(:date => Date.today)
+----+------------+
| id | date       |
+----+------------+
| 4  | 2012-12-14 |
+----+------------+
4

1 に答える 1

1

最善の策は、日付範囲フォームを使用することだと思います(これにより、SQLの「BETWEEN」クエリが生成されます)。

posts.all(:date => (Date.parse('2012-12-01') .. Date.parse('2012-12-31')))

他の年/月については、上記の例のようにハードコーディングするのではなく、その月の最後の日付を検索または計算する必要があります。

def month_range(year, month)
  d0 = Date.parse([year, month, 1].join('-'))
  (d0 .. (d0>>1)-1)
end
posts.all(:date => month_range(2012, 12))
于 2012-12-14T21:33:46.807 に答える