質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

1021閲覧

FullCalendar実装でカレンダーを表示させたい。

K014

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/11/12 05:01

前提・実現したいこと

カレンダーを表示させたい。

発生している問題・エラーメッセージ

【Rails】 5分でFullCalendar実装する方法(下記URL)を試した。
https://qiita.com/imotan/items/c73fab5ee230114a08b6

Eventを作成、編集、削除させる機能は実装できたが、肝心のカレンダーを出すことができない。

該当のソースコード

Rails のバージョンは6.0.0を指定
scaffold で Eventモデルを作成しました。

ターミナル

// Rails アプリケーション作成 $ rails _5.2.4.2_ new five_min_fullcalendar $ cd five_min_fullcalendar // scaffold で Event モデルを作成 $ rails g scaffold event title:string body:string start_date:datetime end_date:datetime $ rails db:migrate RAILS_ENV=development

GemFile へ3つのgemを追加してbundle install

GemFile

1gem 'jquery-rails' 2gem 'fullcalendar-rails' 3gem 'momentjs-rails'

fullcalendar の部分を追加

app/assets/stylesheets/application.css

1*= require_tree . 2 *= require_self 3 *= require fullcalendar 4 */

fullcalendar の部分を追加

app/javascript/packs/application.js

1// This file is automatically compiled by Webpack, along with any other files 2// present in this directory. You're encouraged to place your actual application logic in 3// a relevant structure within app/javascript and only use these pack files to reference 4// that code so it'll be compiled. 5 6require("@rails/ujs").start() 7require("turbolinks").start() 8require("@rails/activestorage").start() 9require("channels") 10 11 12// Uncomment to copy all static images under ../images to the output folder and reference 13// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>) 14// or the `imagePath` JavaScript helper below. 15// 16// const images = require.context('../images', true) 17// const imagePath = (name) => images(name, true) 18//= require jquery 19//= require moment 20//= require fullcalendar 21 22$(function () { 23 // 画面遷移を検知 24 $(document).on('turbolinks:load', function () { 25 if ($('#calendar').length) { 26 27 function Calendar() { 28 return $('#calendar').fullCalendar({ 29 }); 30 } 31 function clearCalendar() { 32 $('#calendar').html(''); 33 } 34 35 $(document).on('turbolinks:load', function () { 36 Calendar(); 37 }); 38 $(document).on('turbolinks:before-cache', clearCalendar); 39 40 //events: '/events.json', 以下に追加 41 $('#calendar').fullCalendar({ 42 events: '/events.json', 43 //カレンダー上部を年月で表示させる 44 titleFormat: 'YYYY年 M月', 45 //曜日を日本語表示 46 dayNamesShort: ['日', '月', '火', '水', '木', '金', '土'], 47 //ボタンのレイアウト 48 header: { 49 left: '', 50 center: 'title', 51 right: 'today prev,next' 52 }, 53 //終了時刻がないイベントの表示間隔 54 defaultTimedEventDuration: '03:00:00', 55 buttonText: { 56 prev: '前', 57 next: '次', 58 prevYear: '前年', 59 nextYear: '翌年', 60 today: '今日', 61 month: '月', 62 week: '週', 63 day: '日' 64 }, 65 // Drag & Drop & Resize 66 editable: true, 67 //イベントの時間表示を24時間に 68 timeFormat: "HH:mm", 69 //イベントの色を変える 70 eventColor: '#87cefa', 71 //イベントの文字色を変える 72 eventTextColor: '#000000', 73 eventRender: function(event, element) { 74 element.css("font-size", "0.8em"); 75 element.css("padding", "5px"); 76 } 77 }); 78 } 79 }); 80});

JSONファイルを作成して、FullCalendarのライブラリへそのJSONファイルを渡す

app/views/events/index.json.jbuilder

1# json.array! @events, partial: "events/event", as: :event 2json.array!(@events) do |event| 3 json.extract! event, :id, :title, :body 4 json.start event.start_date 5 json.end event.end_date 6 json.url event_url(event, format: :html) 7end

id が calendar の div 要素を一番下に追加

app/views/events/index.html.erb

1<p id="notice"><%= notice %></p> 2 3<h1>Events</h1> 4 5<table> 6 <thead> 7 <tr> 8 <th>Title</th> 9 <th>Body</th> 10 <th>Start date</th> 11 <th>End date</th> 12 <th colspan="3"></th> 13 </tr> 14 </thead> 15 16 <tbody> 17 <% @events.each do |event| %> 18 <tr> 19 <td><%= event.title %></td> 20 <td><%= event.body %></td> 21 <td><%= event.start_date %></td> 22 <td><%= event.end_date %></td> 23 <td><%= link_to 'Show', event %></td> 24 <td><%= link_to 'Edit', edit_event_path(event) %></td> 25 <td><%= link_to 'Destroy', event, method: :delete, data: { confirm: 'Are you sure?' } %></td> 26 </tr> 27 <% end %> 28 </tbody> 29</table> 30 31<br> 32 33<%= link_to 'New Event', new_event_path %> 34 35<div id="calendar"></div>

turbolinks対策

app/views/layouts/application.html.erb

1<!DOCTYPE html> 2<html> 3 <head> 4 <title>FiveMinFullcalendar</title> 5 <%= csrf_meta_tags %> 6 <%= csp_meta_tag %> 7 <script type="text/javascript" src="https://js.pay.jp/v1/"></script> 8 <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 9 <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> 10 </head> 11 12 <body data-turbolinks="false"> 13 <%= yield %> 14 </body> 15</html>

試したこと

・別のVSCode内で上手く行かなかったので、この機能だけで実装してみた
・views/layouts/apprication.html.erbにjavaを読み込むscriptを記述する

補足情報(FW/ツールのバージョンなど)

Rails 6.0.0
ruby 2.6.5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問