みんな大好きdeviseさんともっと仲良くなりたい
今日は基本的な使い方とよく起こりうるエラーを組み合わせてまとめます
deviseとは
Railsを扱う場合、ログインまわりの機能はdeviseというGemを使用することで簡単に実装できます!これを使わない手はない。
deviseのGemをインストールしてみよう!
手順は以下です
- Gemファイルの最終行に「gem "devise"」を追記する
- ターミナルにてカレントディレクトリを確認した後、$ bundle installコマンドを実行する
- $ rails s コマンドでサーバーを立ち上げ直す
ここでよく見かけるエラー1
Gemをインストールした後は、サーバーを立ち上げ直さなければいけません!なぜならインストールしたGemは、サーバーを立ち上げたときに反映されるからです。
つまりサーバーの立ち上げを行わない場合は、エラーが発生してしまいます
例えば、deviseをインストールしているのにも関わらず、No Method Errorでundefinde method "usder_signed_in?"が出てきてしまう時などです。注意しましょう!
deviseの設定ファイルを作成しよう!
設定ファイルを作成するためには、$ rails g devise:installコマンドを実行します
作成されるファイルは以下です!
- config/initializers/devise.rb
- config/locales/devise.en.yml
ここでよく見かけるエラー2
$ rails g devise:installコマンドを実行せずに、次の手順"Userモデルを作成するためのコマンド $ rails g devise userの実行"に進んでしまうと、エラーが発生します!
それが、ターミナルでrailsを含むコマンドを打とうとするときです。
例えば、$rails routesを実行すると・・・
NoMethodError: undefined method 'devise' for User(call 'User.connection' to establish a connection)というようなエラー文が表示されます
でも大丈夫!
こんな時は、以下の手順で解決しましょう
- config/routes.rbファイルに自動的に記述された「devise_for :users」をコメントアウトする
- ターミナルにて**$ rails g devise:install**コマンドを実行する
これで解決できるはずです!
アカウントを作成するためのUserモデルを作ろう!
手順は以下です
- $ rails g devise userコマンドを実行
- $ rails db:migrateコマンドで、マイグレートを実行
ここではマイグレーションファイルが作成されることに注目しましょう
- app/models/user.rb →Userモデル
- db/migrate/2014XXXXXXXXXX_devise_create_users.rb →ログイン機能に必要なカラムが追加されるマイグレーションファイル
- test/fixtures/users.yml
- test/models/user_test.rb
また、$ rails g devise userコマンドを実行することで、config/routes.rbファイルにdevise用のルーティング(= devise_for :users )が自動で追加されることもポイントです
ここでよく見かけるエラー3
よーし!ここで一度サーバーを立ち上げなおしてみよう!そう思って実行したところ、PendingMigrationErrorが出てしまった...なんてことありませんか??
でも焦らない!そんな時は以下の方法で解決しましょう
- migrate の実行がされているのか確認
→**$ rails db:migrate**コマンドを実行し忘れていないか - おっと、migrateを実行しようとしたら、次は新しいエラーが出たぞ!Myaql2::Error:...
→**$rails db:migrate:status**コマンドでステータスを確認してみる - down状態のファイルが見つかった!
→間違って2度**$ rails g devise userコマンドを実行してしまった可能性あり!
→down状態のAdd devise to users**というマイグレーションファイルを削除する
これで解決だ!!
まとめ
私たちがPCの中の構造まで理解せずとも使用できるように、deviseは非常に便利な反面、少し複雑な構造をしているようですね!
しかしログイン機能の実装は、
1. deviseのGemをインストール
2. deviseの設定ファイルを作成
3. deviseコマンドを使ったUserモデルの作成
以上の手順を踏めば簡単に行うこともわかりました