「simple_calendar」の習作

simple_calendar Gemを使ってRailsでカレンダーを表示してみました。

simple_calendar
A simple Rails calendar

simple_calendar は月単位や週単位のカレンダーを表示できます。
週の始まりのデフォルトは月曜日ですが変更することができます。
今回は月単位のカレンダーを表示します。

完成画面

環境
Ruby 3.4.2
Rails 8.0.2
simple_calendar 3.1.0

手順
アプリを生成します。

rails new koyomi
cd koyomi

 

カレンダーを表示する画面を作ります。

bin/rails g controller home index

 

root ルーティングに home#index を設定します。

config/routes.rb

root "home#index"

 

simple_calendar Gemを追加します。

bundle add simple_calendar

 

月表示のカレンダーを表示します。

app/views/home/index.html.erb

<%= month_calendar(events: @meetings) do |date, meetings| %>
  <%= date.day %>
<% end %>

 

カレンダーにスタイルを適用します。
simple_calendar が提供するCSSファイル名を確認します。

bin/rails assets:reveal | grep css
application.css
simple_calendar.css
trix.css

 

提供されている simple_calendar.css をstylesheet_link_tagに追加します。

app/views/layouts/application.html.erb

<%= stylesheet_link_tag :app, "data-turbo-track": "reload" %>
<%= stylesheet_link_tag "simple_calendar", "data-turbo-track": "reload" %>

独自のモデル(ミーティング)を追加します。
モデルには start_time を持つ必要があります。

bin/rails g scaffold Meeting name:string! start_time:datetime!

ミーティングの擬似データを作成します。

db/seeds.rb

today = Time.current
Meeting.create!(name: "2日前", start_time: today.ago(2.days))
Meeting.create!(name: "今日", start_time: today)
Meeting.create!(name: "月末", start_time: today.end_of_month)
bin/rails db:seed

ミーティングをカレンダーに表示します。
今月のミーティングを取得します。

app/controllers/home_controller.rb

class HomeController < ApplicationController
  def index
    start_date = params.fetch(:start_date, Time.current).to_date
    @meetings = Meeting.where(start_time: start_date.beginning_of_month.beginning_of_week..start_date.end_of_month.end_of_week)
  end
end

取得したミーティングを表示します。

app/views/home/index.html.erb

<%= month_calendar(events: @meetings) do |date, meetings| %>
  <%= date.day %>

  <% meetings.each do |meeting| %>
    <div>
      <%= meeting.name %>
    </div>
  <% end %>
<% end %>

以上です。



▼この記事がいいね!と思ったらブックマークお願いします
このエントリーをはてなブックマークに追加