気ままに気ままのエンジニアブログ

定期的に得た知見を気ままに発信中

【Rails/devise】curennt_user.adimin?を使ったらundefined method `admin?' for nil:NilClassのエラーが発生したので、解決していく

こんにちは。

最近のマイブームは、朝にバナナ。

どうもハチマキです。

はじめに

deviseを使って、ユーザログイン、登録機能を実装した時のお話です。

投稿フォームの表示を「ユーザがadminユーザの場合にのみ」表示させたいという状況がありました。
その際に「curennt_user.adimin?」を定義したらエラーが発生し、なかなか解決できなかったので、今回はこの解決方法について書いていきたいと思います。

では早速行きましょう!

本日の概要 : curennt_user.adimin?を使ったらエラーが発生した時の解決方法

エラー例

下記のように条件分岐を使い、「if current_user.admin?」を定義したら「undefined method `admin?' for nil:NilClass」のエラーが発生

f:id:hachimaki37:20201208191337p:plain

原因

この原因は、adminがnilということが根本原因ではなく、current_userがnilであることが原因で発生しています。
よって、admin?でadminの真偽値を判定できずエラーが発生しています。

解決方法

current_userであることを別途定義すれば解決できます。
今回は、ユーザが「ログインしている」かつ、ユーザが「admin」の場合のように投稿フォームを表示させたかったので、下記のようにコードを書き換え解決に至りました。

- if user_signed_in? && current_user.admin?

これで完了です!