13
8

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 3 years have passed since last update.

[rails] deviseのデフォルトについて

Posted at

#deviseの導入とデフォルトについて

  • deviseの導入
  • deviseのデフォルト

##Why
###deviseに関する記事を調べた時にdeviseのコントローラーを作る記事しかなく、application.controllerのみで完結させたかったから。また、その際にdeviseがデフォルトで持つ範囲を知らなく、余計なカラムやvalidationを記述していた為エラーの解決に時間がかかったのでこれを参考にしていただければと思います。
#devise導入

Gemfile(最後の行)
gem 'devise'
ターミナル
# 現在のディレクトリが~/projects/pictweetであることを確認
% pwd

# Gemをインストール
% bundle install
ターミナル
# サーバーを起動
% rails s
ターミナル
# deviseの設定ファイルを作成
% rails g devise:install
ターミナル
# deviseコマンドでUserモデルを作成
% rails g devise user

###以下のようにdevise_for :usersが入っていればOK!

routes.rb
Rails.application.routes.draw do
  devise_for :users
  root to: 'tweets#index'
  resources :tweets
end

###次はテーブルの作成

ターミナル
# マイグレーションを実行
% rails db:migrate

###データベースにテーブルが作成されていればOK!
###最後に下記も忘れずに!

ターミナル
# ctrl + Cでローカルサーバーを終了

# 再度ローカルサーバーを起動
% rails s

##これで一通りdeviseの導入が終わったので、あとは好きなように実装するだけです。
#今回はデフォルトについてです!!!
c5f52229a3b1938b4297854ebbd2d440.png
##こちらはあまり関係ないのですが、validatesでname,email,passwordしかかけておらずデータベースを確認するとpasswordの部分がencrypted_passwordでカラムとして登録してあります。「validatesにencrypted_passwordがないよ?」と突っ込みたいところですがencrypted_passwordはパスワードを暗号化してテーブルに保存するというものなのでvalidatesはpasswordをかけるだけでok。ちなみにpassword_confirmationとかもvalidatesをかけなくてok。

#話が脱線してしまいましたがこちら
a23f24d4b5f8cf20bd382f240b123723.png
##13行目に注目。
###deviseをインストールすることでdevise_parameter_sanitizerメソッドが使えるようになります。deviseでユーザー登録をする場合に使用でき、「特定のカラムを許容する」メソッドになります。このメソッドにdevise_parameter_sanitizerメソッドを定義します。
##devise_parameter_sanitizerメソッド
###permitメソッドを組み合わせることにより、deviseに定義されているストロングパラメーターに対し、自分で新しく追加したカラムも指定して含めることができます。なのでノーマルな新規登録、ログイン機能くらいであればわざわざdeviseのコントローラーを作らなくてもapplication.contoroller内で完結できちゃいます。(新規登録などで複数ページに渡って遷移させる場合ちゃんとcontrollerを作った方がいい)

application.controller.rb
private
def configure_permitted_parameters  # メソッド名は慣習
  # deviseのUserモデルにパラメーターを許可
  devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
end

##14行目に注目!

application.controller.rb
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])

###keys:の後に続く[ ]内に:nameの他に本来:email:passwordなどを入れなければいけません。ですがdeviseのデフォルトで裏で勝手に処理してくれているのでここは:nameだけでok!

#余談
##バリデーションのデフォルト解除方法
##これを

application.controller.rb
devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

##こうするだけ!

application.controller.rb
devise :database_authenticatable, :registerable,
         :recoverable, :rememberable

#まとめ
deviseは簡単に導入できて、簡単に新規登録やログイン、ログアウト機能を実装できる素晴らしいgemですが、それだけ便利すぎる裏では様々なデフォルトが勝手に反映されてしまって余計なエラーなどが起きやすくなるのでせめてもの簡単なデフォルトの紹介をさせて頂きました。

13
8
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
13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?