🔳deviseを使ったユーザー機能実装
devise userでモデルを作成する
rails g devise user
マイグレーションファイルを編集する
class DeviseCreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :name, null: false
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
end
add_index :users, :name, unique: true
rails db:migrateする。
モデルにバリデーションを追加する
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :name, presence: true, uniqueness: true
end
間違えたらrails db:rollback
application_controoler.rbを編集
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authenticate_user!
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
end
end
簡単に説明すると、サインアップ時に入力されたnameキーの内容の保存を許可
ログインビュー画面を編集(下記は例)
#account-page.account-page
.account-page__inner.clearfix
.account-page__inner--left.account-page__header
%h2 Edit Account
%h5 アカウントの編集
= link_to "ログアウト", '#', class: 'btn'
= link_to "トップページに戻る", :back, class: 'btn'
.account-page__inner--right.user-form
= form_for(current_user) do |f|
.field
.field-label
= f.label :name
.field-input
= f.text_field :name, autofocus: true
.field
.field-label
= f.label :email
.field-input
= f.email_field :email
.actions
= f.submit "Update", class: 'btn'
routesを設定
コントローラを編集
def edit
end
def update
if current_user.update(user_params)
redirect_to root_path
else
render :edit
end
end
private
def user_params
params.require(:user).permit(:name, :email)
end
フラッシュにビューを追加
#app/views/layouts/_notifications.html.haml
.notification
- flash.each do |key, value|
= content_tag :div, value, class: key
#app/views/layouts/application.html.haml
%body
= render 'layouts/notifications'
= yield