【Ruby】【Rails】自作カレンダーで、月や週を切り替える
昨日、今月1ヶ月の表示をするカレンダーを作成しました。
今回は、今月から見て翌月や先月、またはさらにその先の配列を取得できるようにしていきます。
前回のコードに付け足していくので、もしよかったらそちらもご覧下さい。
【Rails】【Ruby】Dateを使って今月の日数を配列にして表示
月や週を切り替える
最初にどうやって実装しようか?を考えます。
今回はviewに翌月、前月に移動するリンクを作成し、クリックによってパラメータを変化させ、その分だけ移動させるようにします。
完成形はこんな感じで
まずは翌月、前月のリンクを作ります。
span = link_to "Prev", workdays_month_path(p: @x) span = link_to "Next", workdays_month_path(n: @x)
パラメターとして、前月はpを、翌月はnを渡します。
リンク先は同じviewにして、パラメーターだけ更新します。
コントローラーでパラメーターを受け取ります。
def month if params[:n].present? @x = params[:n].to_i + 1 elsif params[:p].present? @x = params[:p].to_i - 1 else @x = 0 end # 現在の曜日と年月日 @date_now = Date.current.months_since(@x) @weeks = ["日", "月", "火", "水", "木", "金", "土"] firstDay = @date_now.beginning_of_month firstDayIndex = firstDay.wday @calender = Array.new(35){|i| firstDay + (i - firstDayIndex)} @workers = Worker.all end
そのままのリンクでパラメーターが何もない時は @x には 0 を入れます。
翌月のリンクが押されたらnを渡して、nが渡されたらパラメータに1を足して @x に代入します。
前月のリンクは逆に、@x を−1しています。
この @x を変化させることで、現在からxヶ月前後を取得します。
Date.current.months_since(@x)
months_since は引数の分の月を取得します。
( ) の中身が1なら1ヶ月後、−1なら1ヶ月前を現在の日時から取得します。
基本的にはこれだけで動くようになります。
viewはまだ作りかけですがこんな感じになってます。
span = link_to "Prev", workdays_month_path(p: @x) span = link_to "Next", workdays_month_path(n: @x) #workdays-month table thead tr th 月日 - @calender.each do |c| - if c.day == 1 td = "#{c.strftime("%m")}/#{c.strftime("%d")}" - else td = "#{c.day}" thead tr th 曜日 - @calender.each do |c| td = @weeks[c.wday] tbody - @workers.each do |w| tr th = w.name
一応月初の日だけ月も表示させて、それ以外は日付だけ表示するようにしました。
またボチボチ更新していきます。