[RUBY] [Rails] Implémentation de la suppression logique utilisateur

Cible

ezgif.com-video-to-gif.gif

Environnement de développement

・ Rubis: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Système d'exploitation: macOS Catalina

supposition

Ce qui suit a été mis en œuvre.

Présentation minceIntroduction de Bootstrap 3

la mise en oeuvre

1. Ajouter une colonne

Terminal


$ rails g migration AddIsValidToUsers is_valid:boolean

~_add_is_valid_to_users.rb


class AddIsValidToUsers < ActiveRecord::Migration[5.2]
  def change
    # 「default:"vrai" et "nul":Ajout de "faux"
    add_column :users, :is_valid, :boolean, default: true, null: false
  end
end

Terminal


$ rails db:migrate

2. Modifiez le modèle

user.rb


#Postscript
enum is_valid: { 'Efficacité': true, 'Retiré': false }

def active_for_authentication?
  super && self.is_valid == 'Efficacité'
end

[Explication]

(1) Gérez le statut de l'utilisateur avec enum.

enum is_valid: { 'Efficacité': true, 'Retiré': false }

(2) Si is_valid est «valide», définissez une méthode qui renvoie «true».

def active_for_authentication?
  super && self.is_valid == 'Efficacité'
end

3. Editez session_controller.rb

session_controller.rb


#Postscript
protected

  def reject_user
    user = User.find_by(email: params[:user][:email].downcase)
    if user
      if (user.valid_password?(params[:user][:password]) && (user.active_for_authentication? == true))
        redirect_to new_user_session_path
      end
    end
  end

[Explication]

① Vérifiez s'il existe un utilisateur correspondant à l'adresse e-mail saisie.

user = User.find_by(email: params[:user][:email].downcase)

(2) Si le mot de passe saisi est correct et que la valeur de retour de la méthode définie dans «2» est vraie, l'écran de connexion s'affiche sans effectuer le processus de connexion.

if (user.valid_password?(params[:user][:password]) && (user.active_for_authentication? == true))
  redirect_to new_user_session_path
end

4. Modifier la vue

Affichez les messages flash à l'aide du composant d'alerte Bootstrap 3.

sessions/new.html.slim


/Postscript
- if flash.present?
  .alert.alert-danger.alert-dismissible.fade.in role='alert'
    button.close type='button' data-dismiss='alert'
      span aria-hidden='true'
        | ×
    - flash.each do |name, msg|
      = content_tag :div, msg, :id => 'flash_#{ name }' if msg.is_a?(String)

      p
        a href='#' data-dismiss='alert'
          |Fermer

Recommended Posts

[Rails] Implémentation de la suppression logique utilisateur
[Rails] Implémentation de la fonction de retrait utilisateur
Implémentation de la suppression d'ajax dans Rails
[Rails] Implémentation de la fonction de catégorie
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémentation d'une fonction similaire
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation asynchrone de la fonction similaire
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Implémentation de la fonction d'exportation CSV
[Rails] Implémentation de fonctions de catégorie plusieurs à plusieurs
[Rails] Implémentation de la fonction coupon (avec fonction de suppression automatique par traitement par lots)
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (2)
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (1)
Rails [Pour les débutants] Implémentation de la fonction de commentaire
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (3)
[Ruby on rails] Implémentation d'une fonction similaire
[Rails] Mise en œuvre de la validation qui maintient l'unicité
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
Implémentation de la fonction de connexion Ruby on Rails (Session)
[Rails] Implémentation de la fonction d'agrandissement d'image à l'aide de lightbox2
[Rails] Mise en œuvre de "notifier la notification d'une manière ou d'une autre"
[Rails] Mise en œuvre du classement des nombres PV à l'aide de l'impressionniste
[Rails] Implémentation du diaporama d'images à l'aide de Bootstrap 3
Implémentation de la recherche par hashtag Rails
Implémentation du compte à rebours Rails6
[rails] gem'payjp'implementation procedure
[Rails] Implémentation de la fonction glisser-déposer (avec effet)
Implémentation de la fonction de connexion Ruby on Rails (édition de devise)
[Rails] Présentation de PAY.JP
Implémentation de Rails Action Text
Implémentation de la fonction de recherche
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Préparation"
Implémentation appliquée de l'espace de chat
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "seed edition"
Mise en œuvre de la fonction de pagénation
Introduction de l'authentification des utilisateurs
[Rails6] concevoir + paranoïa + à la fois suppression logique utilisateur et contraintes uniques réalisées dans la série MySQL8
Implémentation de la fonction Rails CRUD ① (nouvel ajout, suppression cette fois)
Explication de Ruby on rails pour les débutants ⑦ ~ Implémentation Flash ~
Construire une API de tableau d'affichage avec certification et autorisation avec Rails 6 # 18 ・ Implémentation du contrôleur de l'utilisateur final
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Edit Form Edition"
[Rails] Implémentation de la saisie d'adresse automatique avec jpostal et jp_prefecture
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "Formulaire de création"
[Ruby on Rails] Élimination de Fat Controller-First, logic to model-
Mise en place de la fonction de tri des rails (affichés par ordre de nombre de like)