はじめに
メモ用。
タイトルの通り。simple_calendarで表示する月をコントロールさせたい場合
start_dateパラメータが制御しているって話。
simple_calendar
simple_calendarのgemをインストールし、
viewテンプレートのカレンダーを表示させたい箇所に以下を記載する。
<%= month_calendar do |date| %>
<%= date %>
<% end %>
するとこんな感じで今月のカレンダーが表示される(当時:2018/12/25)
ここで Previous
をクリックすると、以下のように2018年11月のカレンダーが表示される。
非常に便利だが、このままでは例えば10年前のカレンダーを表示させたい場合、Previous
を120回クリックしなけれあならないことになる。
「2008年12月のカレンダー」と指定することはできないものか。
start_dateパラメータ
2018年11月の画像のURLを見ると?start_date=2018-11-25
と、URLクエリでパラメータを送っているのが分かる。
simple_calendarはこの送られてきたパラメータによって何月のカレンダーを表示するかが制御されているようである。
?start_date=
以降の文字列は2018-11-1
でも2018-11-30
でも何でも大丈夫。(ただし、2018-11-100
や2018-11-31
などのように暦上存在しない日にちは✖️)
使い方
使い方としては、ブログなどのxx年xx月の記事といった使い方が想定できそう。
showでparams[:id]を "2018-12"のような表記として、
ジャンプしたいページとカレンダーの年と月が@year,@monthに代入されているとして、
<%= link_to "#{@year}年#{@month}月", blog_path("#{@year}-#{@month}", start_date: "#{@year}-#{@month}-1") %>
みたいな感じ。