1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RailsのAuthlogicで任意のモデル名を使った実装をしたいとき

Last updated at Posted at 2019-06-05

経緯

社内で、勤怠管理システムをRuby on Railsで構築しようということになり、先週末から本格的にコーディングをはじめました。
管理系のアプリなので認証機能を実装しようと思い、gemのAuthlogicを用いて実装を行いました。
大きく困ったところはなかったのですが、一点躓いた点があったので記事にしました。

※本記事はAuthlogicの実装方法をある程度理解していることを前提に書いていますので、ご了承ください。

バージョン情報

Ruby: 2.5.3
Ruby on Rails: 5.2.3
Authlogic: 5.0.2
OS: macOS Majave 10.14.5

躓いた点

  • 社員を示すEmployeeモデルを作成し、そのモデルにAuthlogicを適用しようと思ったが
    ログイン画面表示時に以下のエラーが発生した。
NameError in UserSessionsController#new

uninitialized constant User

authlogic_error.png

解決方法

  • 結論としては、Authlogic::Session::Baseを継承したUserSessionモデルに、Authlogicを適用するモデル名を以下のように明示的に指定する必要があった。
class UserSession < Authlogic::Session::Base
  authenticate_with Employee      #=> この行を追加
end

解決するまでの道のり

  1. Google先生に聞いていみる
    → なかなか、当該情報が見当たらず、Userモデルを例にしているチュートリアルがほとんどだった。
  2. リファレンスを読み漁る
    → 私自身、英語が得意というわけでもないので、なかなか見つけることができなかった。
  3. teratailで質問をする
    → 質問を投稿したが、自分の情報が足りなかったのか、この現象が当たり前すぎることなのか、回答が得られなかった
  4. 再びリファレンスを読み漁る
    → ここでようやく、authenticate_withをリファレンスから見つけることができました
    https://www.rubydoc.info/github/binarylogic/authlogic/master/Authlogic/Session/Klass/Config

反省

  • 英語のリファレンスはなかなか読むのに苦労しましたが、キーワードで調べていくうちに見つけることができたので、
    リファレンスを読むことの大切さを今更ながら、改めて実感しました。
  • なかなか今回の現象の記事等が出てこなかったので、この記事が少しでもお役に立てれば幸いです。
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?