コレグレーデギネード

WindowsとかUbuntuとかRubyとかRailsとか

Railsで自作カレンダー(Viewだけで作る)

今回はあえて自作で作ります。

ControllerとViewを用意するのに面倒なのでScaffoldします。
カラムは空でも実行されます。必要に応じて追加してください。

$ rails generate scaffold Calendar

migrateします。

$ rails db:migrate

祝日の判定にholiday_japanを使うのでGemfileに書いてbundle installしておいてください。
Gemfile

gem 'holiday_japan'

bundle installします。

$ bundle install --path vendor/bundle

Viewを以下のように書き換え
app/views/calendars/index.html.erb

表示するカレンダーは…
<%= params[:month] ? @today = params[:month].to_date : @today = Date.today %><br />
最初の週の日曜は…
<%= @start_calendar = @today.beginning_of_month.beginning_of_week(:sunday) %><br />
最後の週の月曜は…
<%= @end_calendar = @today.end_of_month.end_of_week(:sunday) %><br />
1ヶ月後は…
<%= @next_month = @today.next_month %><br />
1ヶ月前は…
<%= @prev_month = @today.prev_month %><br />

<style type="text/css">
#week_color_today { background:#DFD; }
#week_color_holiday { background:#FDD; }
#week_color0 { background:#FDD; }
#week_color6 { background:#DDF; }
</style>

<hr />

<%= link_to "<<前の月",calendars_path(month: @prev_month) %>
<%= link_to "次の月>>",calendars_path(month: @next_month) %>
<%= @today.strftime("%Y年%m月") %>
<table border=1>
  <% (@start_calendar..@end_calendar).each do |calendar| %>
      <%== "<tr>" if calendar.sunday? %>
      <td id="week_color<%= HolidayJapan.check(calendar) ? "_holiday" : calendar.today? ? "_today" : calendar.wday  %>">
        <%= calendar.day if calendar.month == @today.month %>
      </td>
      <%== "</tr>" if calendar.saturday? %>
  <% end %>
</table>

今回はViewだけで作りました。
f:id:namtcerid:20190729101456p:plain