[RUBY] [Rails] Implementierung des logischen Löschens durch den Benutzer

Ziel

ezgif.com-video-to-gif.gif

Entwicklungsumgebung

・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina

Annahme

Folgendes wurde implementiert.

Schlanke EinführungEinführung von Bootstrap 3

Implementierung

1. Spalte hinzufügen

Terminal


$ rails g migration AddIsValidToUsers is_valid:boolean

~_add_is_valid_to_users.rb


class AddIsValidToUsers < ActiveRecord::Migration[5.2]
  def change
    # 「default:"true" und "null":"Falsch" hinzugefügt
    add_column :users, :is_valid, :boolean, default: true, null: false
  end
end

Terminal


$ rails db:migrate

2. Bearbeiten Sie das Modell

user.rb


#Nachtrag
enum is_valid: { 'Wirksamkeit': true, 'Zurückgezogen': false }

def active_for_authentication?
  super && self.is_valid == 'Wirksamkeit'
end

[Erläuterung]

(1) Verwalten Sie den Benutzerstatus mit enum.

enum is_valid: { 'Wirksamkeit': true, 'Zurückgezogen': false }

(2) Wenn is_valid "gültig" ist, definieren Sie eine Methode, die "wahr" zurückgibt.

def active_for_authentication?
  super && self.is_valid == 'Wirksamkeit'
end

3. Bearbeiten Sie session_controller.rb

session_controller.rb


#Nachtrag
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

[Erläuterung]

① Überprüfen Sie, ob ein Benutzer der eingegebenen E-Mail-Adresse entspricht.

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

(2) Wenn das eingegebene Passwort korrekt ist und der Rückgabewert der in "2" definierten Methode wahr ist, wird der Anmeldebildschirm angezeigt, ohne den Anmeldevorgang durchzuführen.

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

4. Ansicht bearbeiten

Zeigen Sie Flash-Meldungen mithilfe der Bootstrap 3-Warnkomponente an.

sessions/new.html.slim


/Nachtrag
- 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'
          |schließen

Recommended Posts

[Rails] Implementierung des logischen Löschens durch den Benutzer
[Rails] Implementierung der Benutzerrückzugsfunktion
Implementierung der Ajax-Entfernung in Rails
[Rails] Implementierung der Kategoriefunktion
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung der CSV-Importfunktion
[Rails] Asynchrone Implementierung der Like-Funktion
[Rails] Implementierung der Bildvorschau
[Rails] Über die Implementierung der Like-Funktion
[Rails] Implementierung der CSV-Exportfunktion
[Rails] Implementierung von Viele-zu-Viele-Kategoriefunktionen
[Rails] Implementierung der Couponfunktion (mit automatischer Löschfunktion mittels Stapelverarbeitung)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (2)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (1)
Rails [Für Anfänger] Implementierung der Kommentarfunktion
Implementierung der Benutzerauthentifizierungsfunktion mit devise (3)
[Ruby on Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung einer Validierung, die die Eindeutigkeit beibehält
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
Implementierung der Ruby on Rails-Anmeldefunktion (Sitzung)
[Rails] Implementierung der Bildvergrößerungsfunktion mit Lightbox2
[Rails] Implementierung von "Benachrichtigung auf irgendeine Weise benachrichtigen"
[Rails] Implementierung des PV-Nummernrankings mit Impressionist
[Rails] Implementierung einer Bild-Diashow mit Bootstrap 3
Implementierung der Rails-Hashtag-Suche
Implementierung des Rails6-Countdown-Timers
[Schienen] gem'payjp'implementierungsverfahren
[Rails] Implementierung der Drag & Drop-Funktion (mit Wirkung)
Implementierung der Ruby on Rails-Anmeldefunktion (Devise Edition)
[Rails] Einführung von PAY.JP
Implementierung von Rails Action Text
Implementierung der Suchfunktion
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Vorbereitung"
Angewandte Implementierung von Chat-Space
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der "Seed Edition" der Vorfahren
Implementierung der Pagenationsfunktion
Einführung der Benutzerauthentifizierung
[Rails6] entwickelt + Paranoia + sowohl das logische Löschen des Benutzers als auch eindeutige Einschränkungen, die in der MySQL8-Serie realisiert wurden
Implementierung der Rails CRUD-Funktion ① (Neuzugang, diesmal Löschung)
Erklärung von Ruby on Rails für Anfänger ⑦ ~ Flash-Implementierung ~
Erstellen Sie mit Rails 6 # 18 eine Bulletin-Board-API mit Zertifizierung und Autorisierung. ・ Implementierung des Endbenutzer-Controllers
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Edit Form Edition"
[Rails] Implementierung der automatischen Adresseneingabe mit jpostal und jp_prefecture
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Erstellungsformular"
[Ruby on Rails] Eliminierung von Fat Controller-First, Logik zum Modell-
Implementierung der Rails-Sortierfunktion (angezeigt in der Reihenfolge der Anzahl der Gleichen)