自分用。練習用に作るときに設定することの備忘録。
目次
1.導入 2.ユーザーテーブルの作成 3.マイグレーションファイルの編集 4.コントローラへの記述追加 5.devise.rbの記述追加 6.ルートに記述追加 7.ログイン画面を編集する 8.ログアウト機能を作る 9.サインイン画面を編集する1.導入
deviseをインストールするためGemfileにdeviseを記載Gemfile
gem 'devise'
ターミナルにてインストール
tarminal
$ bundle install
$ rails g devise:install
2.ユーザーテーブルの作成
tarminal
$ rails g devise User
Userがモデル名
3.マイグレーションファイルの編集
追加することがあれば追加する。id,password,emailは標準装備。今回はname,age,gender,introduction,profile_image_idを追加するdb/migrate/202102~~01_devise_create_users.rb
(略)
# t.datetime :locked_at
t.string :name
t.integer :age
t.integer :gender
t.text :introduction
t.string :profile_image_id #ここまで追加
t.timestamps null: false
end
(略)
そしたらターミナルでrails db:migrate
を行う
4.コントローラへの記述追加
before_action :authenticate_user!はexceptで記述したものだけ通す。onlyは他で使うexcept効果(?)app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :authenticate_user!, only: [:top, :index, :show]
before_action :configure_permitted_parameters, if: :devise_controller?
def after_sign_in_path_for(resource)
ログイン後に遷移させたい所_path
end
def after_sign_out_path_for(resource)
ログアウト後に遷移させたい所_path
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
endend
5.devise.rbの記述追加
ログイン時に必要な項目を変えたい場合に変更。変更しなくても使える。config/initializers/devise.rb
49行目ぐらい
# You can also supply a hash where the value is a boolean determining whether
# or not authentication should be aborted when the value is not present.
# config.authentication_keys = [:email]
これをコメントアウトを外してemailを変える
connfig.authentication_keys = [:name]
6.ルートに記述追加
順番に注意!順番を間違えるとエラーになったり無限に繰り返したりする。config/routes.rb
devise_for :users
root to: 'homes#top'
7.ログイン画面を編集する
tarminal
$ rails g devise:views
出来たら勝手にできたログイン(サインイン)画面を編集
app/views/devise/registrations/new.html.erb
<%= form_with model: @user, url: user_session_path, local: true do |f| %> #変更
<div class="field"> #追加
<%= f.label :name %>
<%= f.text_field :name, autofocus: true %>
</div>
(略)
8.ログアウト機能を作る
置きたいところ.erb
<body>
<% if user_signed_in? %>
<li>
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
</li>
#追加したいものを書く
<% else %>
<li>
<%= link_to "新規登録", new_user_registration_path %>
</li>
<li>
<%= link_to "ログイン", new_user_session_path %>
</li>
#追加したいものを書く
<% end %>
<%= yield %>
</body>
9.サインイン画面を編集する
合ってるか不安app/views/devise/registrations/new.html.erb
<h2>Sign up</h2>
<%= form_with model: @user, url: user_registration_path, id: 'new_user', class: 'new_user', local: true do |f| %> #編集
<%= render "devise/shared/error_messages", resource: resource %>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name, autofocus: true %>
</div>
<div class="field">
<%= f.label :email %>
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
<div class="field">
<%= f.label :age %>
<%= f.number_field :age, autofocus: true, min: 1, max: 100 %>
</div>
<div class="field">
<%= f.label :gender %>
<%= f.select :gender, [ ["男性",1], ["女性", 2], ["未選択", 3 ] , prompt: "性別を選択" %>
(略)
とりあえずこれで一通り。
記録をし忘れているところがあったら編集していく所存。
間違えていないか不安なので見直す。