なんか決まった月のカレンダーをつくりたいときにやった方法。もっといい方法ありそう。
まずi18nのlocaleに曜日のリストをつくる。 svenfuchs/rails-i18nとか使ってると最初からはいってるからべんりー。
ja:
date:
abbr_day_names:
- 日
- 月
- 火
- 水
- 木
- 金
- 土
つぎに、その月のデータをつくる。
# `beginning_of_week`はそのままだと月曜始まりになる。
# 今回は日曜始まり土曜終わりにしたいから`beginning_of_week(:sunday)`として
# 日曜日を週始まりにする。
from_date = Date.new(2013, 10, 1).beginning_of_week(:sunday)
to_date = Date.new(2013, 10, 31).end_of_week(:sunday)
@calendar_data = from_date.upto(to_date)
あとはView側でよしなにテーブルにしてやればいい。
<table>
<tr>
<!-- こう書くと、ja.ymlの`abbr_day_names`をいいかんじに処理してくれる -->
<% t('date.abbr_day_names').each do |day_name| %>
<td><%= day_name %></td>
<% end %>
</tr>
<% @calendar_data.each do |date| %>
<!-- wdayは曜日を日曜始まりで0〜6でだしてくれる -->
<% if date.wday == 0 %><tr><% end %>
<td>
<%= date.month %>/<%= date.day %>
</td>
<% if date.wday == 6 %></tr><% end %>
<% end %>
</table>
結果は下のとおり。