[Ruby on Rails] Suppression logique (fonction de retrait)

Cible

画面収録 2020-10-25 21.31.39.mov.gif

Environnement de développement

ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina

supposition

couler

Ajouter 1 colonne 2 Modifier le modèle 3 Modifier le contrôleur

Ajouter une colonne

Terminal


$ rails g migration AddIsValidToUsers is_valid:boolean

Valeur par défaut ajoutée: true et null: false. En utilisant boolean, il est déterminé si vous vous êtes désabonné ou non avec ture ou false. Dans les cas suivants, la valeur initiale est définie sur true, donc si vous vous êtes déjà retiré, elle sera false.

db/migrate/xxxxxxxxxxxxx_add_is_valid_to_users.rb


class AddIsValidToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :is_valid, :boolean, default: true, null: false
  end
end

Terminal


$ rails db:migrate

Contrôleur d'édition

Créer un écran de désabonnement et une action de désabonnement

app/controllers/homes_controller.rb


  def unsubscribe
    @user = User.find_by(name: params[:name])
  end

  def withdraw
    @user = User.find_by(name: params[:name])
    @user.update(is_valid: false)
    reset_session
    redirect_to root_path
  end

Une description qui empêche la connexion après le retrait.

app/controllers/users/sessions_controller.rb


class Users::SessionsController < Devise::SessionsController
  before_action :reject_inactive_user, only: [:create]

...

  def reject_inactive_user
    @user = User.find_by(name: params[:user][:name])
    if @user
      if @user.valid_password?(params[:user][:password]) && [email protected]_valid
        redirect_to new_user_session_path
      end
    end
  end
end

Modifier les itinéraires

config/routes.rb


get 'unsubscribe/:name' => 'homes#unsubscribe', as: 'confirm_unsubscribe'
patch ':id/withdraw/:name' => 'homes#withdraw', as: 'withdraw_user'
put 'withdraw/:name' => 'users#withdraw'

Modifier vue

erb:app/views/homes/unsubscribe.html.erb


<div>
  <h2>Voulez-vous vraiment vous désinscrire?</h2>
  <div>
    <p>Pour vous désinscrire, cliquez sur «Se désabonner».</p>
  </div>
  <div>
    <%= link_to 'Ne pas retirer', mypage_path(@user) %>
    <%= link_to "Se désister", withdraw_user_path(@user), method: :patch %>
  </div>
</div>

référence

PUT, POST ou PATCH?

Sommaire

Je pense que la suppression logique présente divers avantages et inconvénients, Les informations client sont importantes lors de l'exploitation d'un service, Il est préférable de se désinscrire par suppression logique plutôt que par suppression physique Il est recommandé car il peut être utilisé comme moyen de renaissance.

De plus, sur Twitter, les technologies et les idées qui n'ont pas été téléchargées sur Qiita sont également téléchargées, donc Je vous serais reconnaissant si vous pouviez me suivre. Cliquez ici pour plus de détails https://twitter.com/japwork

Recommended Posts

[Ruby on Rails] Suppression logique (fonction de retrait)
[Ruby on Rails] Introduction de la fonction de pagination
[Ruby on Rails] Fonction de sortie CSV
[Ruby on Rails] Implémentation de la fonction de commentaire
[Ruby on Rails] DM, fonction de chat
[Ruby on Rails] Fonction de recherche (non sélectionnée)
[Rails] Ajout de la fonction de commentaire Ruby On Rails
Commande de création / suppression de modèle Ruby on Rails
[Ruby on rails] Implémentation d'une fonction similaire
Ruby on Rails élémentaire
Association Ruby On Rails
Implémentation de la fonction de connexion Ruby on Rails (Session)
Ruby on Rails Implémentation de la fonction d'envoi automatique de courrier
[Ruby on Rails] Fonction de post-édition (mise à jour, suppression)
[Ruby on Rails] Communication asynchrone de la fonction de publication, ajax
Record d'apprentissage de Ruby on rails -2020.10.03
Création de portfolio Ruby on Rails
Implémentation de la fonction de connexion Ruby on Rails (édition de devise)
Record d'apprentissage Ruby on rails -2020.10.04
[Ruby on Rails] Debuck (binding.pry)
Record d'apprentissage de Ruby on rails -2020.10.05
Record d'apprentissage de Ruby on rails -2020.10.09
[Ruby on Rails] Fonction de classement des scores (affichage complet)
Record d'apprentissage Ruby on rails-2020.10.07 ②
[Ruby on Rails] Fonction de prévisualisation de l'image dans le fichier
Record d'apprentissage Ruby on rails-2020.10.07 ①
Annuler la migration de Ruby on Rails
Record d'apprentissage de Ruby on rails -2020.10.06
Résumé de la validation Ruby on Rails
[Ruby on Rails] Fonction de recherche (modèle, formule de sélection de méthode)
Mémorandum de base Ruby on Rails
[Ruby on Rails] Fonction de signet (enregistrement favori, comme): une direction
[Rails] Implémenter la fonction de fin d'événement (suppression logique) en utilisant la paranoïa (gem)
[Ruby on Rails] Implémenter la fonction de connexion par add_token_to_users avec l'API
[Ruby on Rails] Read try (: [] ,: key)
Variables Ruby on Rails, résumé constant
Installation de Ruby + Rails sur Ubuntu 18.04 (rbenv)
Connaissance de base de Ruby on Rails
Progatez Ruby on Rails
[Rails] Implémentation de la fonction de retrait utilisateur
Ruby on Rails compatible japonais-anglais i18n
(Ruby on Rails6) "Effacer" le contenu publié
[Rails] Fonction de commentaire (enregistrement / affichage / suppression)
[Ruby on Rails] Création de la page de confirmation
Ruby On Rails conçoit un conflit de routage
[Ruby on Rails] Méthode d'aide pratique
[Ruby on Rails] Arrêtez de "boucler jusqu'à ce que ..."
Je souhaite ajouter une fonction de navigation avec ruby on rails
[Ruby on Rails] Fonction de publication que seuls les utilisateurs connectés peuvent publier
(Ruby on Rails6) Créer une fonction pour modifier le contenu publié
[Ruby on Rails] Introduction des données initiales