[rails] deviseのデフォルトについて
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の導入が終わったので、あとは好きなように実装するだけです。
今回はデフォルトについてです!!!
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の導入が終わったので、あとは好きなように実装するだけです。
今回はデフォルトについてです!!!
こちらはあまり関係ないのですが、validatesでname,email,passwordしかかけておらずデータベースを確認するとpasswordの部分がencrypted_passwordでカラムとして登録してあります。「validatesにencrypted_passwordがないよ?」と突っ込みたいところですがencrypted_passwordはパスワードを暗号化してテーブルに保存するというものなのでvalidatesはpasswordをかけるだけでok。ちなみにpassword_confirmationとかもvalidatesをかけなくてok。
話が脱線してしまいましたがこちら
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
まとめ
application.controller.rb
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
application.controller.rb
devise :database_authenticatable, :registerable,
:recoverable, :rememberable
deviseは簡単に導入できて、簡単に新規登録やログイン、ログアウト機能を実装できる素晴らしいgemですが、それだけ便利すぎる裏では様々なデフォルトが勝手に反映されてしまって余計なエラーなどが起きやすくなるのでせめてもの簡単なデフォルトの紹介をさせて頂きました。
Author And Source
この問題について([rails] deviseのデフォルトについて), 我々は、より多くの情報をここで見つけました https://qiita.com/sagawashu/items/e29802d0d70bd16fdee9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .