#概要
ポートフォリオ作成時に、RailsのgemであるSimple Calendarを使用しまして、その際に以下の記事を参考にさせていただきました。
・https://qiita.com/isaatsu0131/items/ad1d0a6130fe4fd339d0
・https://qiita.com/AKI3/items/109d54a35c98328d9155
しかし、undefined method `start_time'のエラーに遭遇し、解決までかなり時間を要してしまいましたので、同じ症状の方がいらっしゃれば、と思い投稿します。
#開発環境
Rails 5.2.5
ruby 2.6.3p62
#遭遇したエラー
エラー内容は「undefined method `start_time'」です。
エラー内容自体はよくあるエラーだと思います。要するに「start_time」というメソッドはありませんぜ、という内容ですね。
ここで悩んだ原因は、コードを見ていただけるとわかりますが、エラーの出ている31行目に「start_time」とは記載していないからですね。
では、どこかにstart_timeがあるのか(特に、上記記事で拝見しました、「rails g simple_calendar:viewssimple」のコマンドで生成された4つのViewファイル)と思い調べてみましたがありません。
このため、相当悩みまして、時間をかなり使いました。
#解決方法
結論として、解決方法は
simple_calendarの公式Github(https://github.com/excid3/simple_calendar)
から得られました。
ReadmeのRendering Eventsの欄に、「start_time以外の名前の開始時刻属性を持つモデルがある場合、またはリレーションシップを介してアクセスする場合は、my_model.rbファイルでstart_timeメソッドを定義することで属性のエイリアスを作成でき、上記のように個別に指定する必要はありません。」(Google翻訳ママ)との記載があったため、ModelにStart_timeメソッドを作ればよい、ということがわかったのです。
ただし、上記二つの記事にはこのような手順が記載されておりませんでした。なぜか。
それは、この2つの記事では、作者様は時刻に関するカラムを、「start_time」の名前で定義されておられたからですね。
このことから、「start_time」メソッドを定義する必要がなかったわけです。
今回、私の場合はsimple_calenderを導入する前にすでにカラムを「start_at」の名前で定義しており(以下にコード)、それに気づかず、また、公式Githubもろくに見ずに実装しようとしたため、上記のエラーとなってしまった、というわけです。
def change
create_table :events do |t|
・・・・・・・(略)・・・・・・・
t.datetime :start_at
・・・・・・・(略)・・・・・・・
end
解決したときのコードはこちらです。simple_calendarに表示させたい内容が入っているModelに、「start_time」メソッドを作成しています。
class Event < ApplicationRecord
#以下を追記
def start_time
self.start_at #self.の後はsimple_calendarに表示させるためのカラムを指定
end
end
以上、公式サイト・Github等はよく確認しましょう、と教訓になりました。
また、この場を借りて、上記二つの記事の作者様に感謝いたします。大変参考になりました。導入等は上記記事を見られれば、問題なく実装できるかと思います。
この他にもっとクールな解決方法をご存じの方は、ご一報いただけると幸いです。