Ruby On Railsでdeviseを扱う
deviseの導入
Gemfile
gem 'devise'
ターミナル
bundle install
rails g devise:install
ファイルを作成
ターミナル
# model
rails g devise user
rails db:migrate
# controller
rails g devise:controllers users
# views
rails g devise:views users
複数のログイン機能を作成する場合
必要な分だけファイルを用意する
ターミナル
# user用
rails g devise user
rails db:migrate
rails g devise:controllers users
rails g devise:views users
# staff用
rails g devise staff
rails db:migrate
rails g devise:controllers staffs
rails g devise:views staffs
設定ファイルを変更する
config/initializers/devise.rb
# config.scoped_views = false
# ↑コメントアウトを外してtrueにする
config.scoped_views = true
ファイルについて
app/views/users/sessions/new.html.erb: ログイン画面
app/views/users/registrations/new.html.erb: 新規登録画面
seedで管理者管理者を作成する
ターミナル
rails g devise adimn
rails db:migrate
rails g devise:controllers admin
rails g devise:views admin
db/seeds.rb
Admin.find_or_create_by(id: 1) do |admin|
admin.email = "example@example.com"
admin.password = "foobar"
end
ターミナル
rails db:seeds
ログアウトする
erb
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<%= link_to "ログアウト", destroy_medicalstaff_session_path, method: :delete %>
:authenticate_user!
deviseで使える便利なメソッド
ユーザがログインしているかどうかを確認し、ログインしていない場合はユーザをログインページにリダイレクトする。
controller.rb
class UsersController < ApplicationController
# befor_actionと一緒に使う
before_action :authenticate_user!
def index
@user = User.find(current_user.id)
favorites = Favorite.where(user_id: current_user.id).pluck(:institution_id)
@favorites_list = Institution.find(favorites)
end
def edit
@user = User.find(current_user.id)
end
def update
@user = User.find(current_user.id)
if @user.update(user_params)
redirect_to edit_user_path(current_user), notice: "プロフィール情報を更新しました"
else
render "edit"
end
end
private
def user_params
params.require(:user).permit(:name, :image)
end
end
日本語化
devise.ja.ymlを使う
devise.ja.ymlをconfig/localesに設置します。devise.ja.ymlはいくつか見本があるようです。
① ② ③
local/appricarion.rb
にconfig.i18n.default_locale = :ja
を記述して、日本語設定をする。
config/application.rb
module Sample #module名はわかりやすいものを
class Application < Rails::Application
config.i18n.default_locale = :ja
end
end
gemを導入する
Gemfile
gem 'rails-i18n'
ターミナル
bundle install
参考資料
heartcombo/devise
【Rails】deviseを導入してみる
[Rails] deviseの使い方(rails6版)
Rails deviseで使えるようになるヘルパーメソッド一覧
【Rails】deviseのビューのform_forをform_withに置き換える
複数のログイン機能を作成する場合
Railsのdeviseを使って複数のユーザー別でログインする方法
deviceを使用して、adminモデルを追加する流れを分かりやすく解説
:authenticate_user!
日本語化
【Rails基礎】deviseを用いたフラッシュメッセージを表示する方法を簡単に解説
【Rails】deviseを利用したflashメッセージの表示方法