[RUBY] Implementieren Sie Benutzerverwaltungsfunktionen in einem Assistentenformat

Überblick

Dieses Mal geht es darum, Benutzerverwaltungsfunktionen in einem Assistentenformat zu implementieren. Das Assistentenformat ist ein Format, in dem die Benutzerregistrierung beim Übergang von Bildschirmen durchgeführt wird.

Diesmal sind die Registrierungsanforderungen für das Benutzermodell nickname, grade, email, password

Anschließend Bildschirmübergang zum user_info-Modell subject, school, profile

Um sich zu registrieren.

User_info ist übrigens Ihre Spezialität, Schule und Ihr Profil.

Implementierung

Installieren Sie zunächst devise und erstellen Sie ein Benutzermodell.

E-Mail und Passwort sind standardmäßig enthalten. Fügen Sie daher Spitznamen und Note hinzu.

Nachdem wir die Spalten hinzugefügt haben, bearbeiten Sie den Controller wie folgt:

controllers.application_controller.rb


class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :grade])
  end
end

Überprüfen Sie als Nächstes das Benutzermodell (Code weggelassen).

Erstellen Sie dann eine Ansichtsdatei.

views.devise.registrations.new.html.erb


<h2>Registrierung von Benutzerinformationen</h2>

<%= form_for(@user, url: user_registration_path) do |f| %>
  <%= render "devise/shared/error_messages", resource: @user %>

  <div class="field">
    <%= f.label :nickname %><br />
    <%= f.text_field :nickname %>
  </div>

  <div class="field">
    <%= f.label :grade %><br />
    <%= f.text_field :grade %>
  </div>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
  </div>

  <div class="field">
    <%= f.label :password %>
    <% if @minimum_password_length %>
    <em>(<%= @minimum_password_length %> characters minimum)</em>
    <% end %><br />
    <%= f.password_field :password, autocomplete: "new-password" %>
  </div>

  <div class="field">
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation, autocomplete: "new-password" %>
  </div>

  <div class="actions">
    <%= f.submit "Sign up" %>
  </div>
<% end %>

<%= render "devise/shared/links" %>

Erstellen Sie einen Anmeldebildschirm.

views.home.index.html.erb


<h1>oberste Seite</h1>

<% if user_signed_in?%>
  <h2>Du bist eingeloggt</h2>
  <%= link_to "Ausloggen", destroy_user_session_path, method: :delete %>
<% else %>
  <h2>Nicht eingeloggt</h2>
  <%= link_to "Anmelden", new_user_registration_path %>
  <%= link_to "Einloggen", new_user_session_path %>
<% end %>

Erstellen Sie nach dem Bildschirmübergang ein user_info-Modell.

Vergessen Sie zu diesem Zeitpunkt nicht, user_id als externen Schlüssel zuzuordnen.

Danach werden das Benutzermodell und das user_info-Modell zugeordnet.

Erstellen Sie als Nächstes einen Devise Controller.

rails g devise:controllers users

Als nächstes kommt das Routing.

routes.rb


Rails.application.routes.draw do
  devise_for :users, controllers: {
    registrations: 'users/registrations'
  }
  root to: "home#index"
end

An dieser Stelle implementieren wir die Registrierung von user_info.

Schreiben Sie eine neue Methode in den Registrierungs-Controller und fügen Sie das Formular in die Ansichtsdatei ein.

views/devise/registrations/new.html.erb


<%= form_for(@user, url: user_registration_path) do |f| %>
  <%= render "devise/shared/error_messages", resource: @user %>

---Kürzung---

 <div class="actions">
    <%= f.submit "Next" %>
  </div>
<% end %>

Die Beschreibung wird von hier aus etwas zunehmen. Schreiben wir die Erstellungsaktion.

controllers/users/registrations_controller.rb



def create
   @user = User.new(sign_up_params)
    unless @user.valid?
      render :new and return
    end
   session["devise.regist_data"] = {user: @user.attributes}
   session["devise.regist_data"][:user]["password"] = params[:user][:password]
   @user_info = @user.build_user_info
   render :new_user_info
 end

Bringen Sie die auf der ersten Seite beschriebenen Daten mithilfe der Sitzung mit. Und die Daten werden mit der Attributmethode formatiert.

Erstellen Sie eine Instanz des UserInfo-Modells, die mit der Instanz @user verknüpft ist, die dieses Mal mit build_user_info generiert wurde. Die hier generierte Instanz des UserInfo-Modells wird der Instanzvariablen @user_info zugewiesen. Rendern Sie anschließend die Ansicht der Aktion new_user_info, in der die Seite angezeigt wird, auf der Sie Ihre Adressinformationen registrieren möchten.

Legen Sie das Routing der Aktion new_user_info fest, die die Seite zum Registrieren von user_info anzeigt, und der Aktion create_user_info, mit der Adressinformationen registriert werden.

routes.rb


Rails.application.routes.draw do

  devise_for :users, controllers: {
    registrations: 'users/registrations'
  }
  devise_scope :user do
    get 'user_infos', to: 'users/registrations#new_user_info'
    post 'user_infos', to: 'users/registrations#create_user_info'
  end

  resources :posts

  root to: "home#index"
end

Wie in diesem Routing beschrieben, erstellen wir eine Ansichtsdatei, um user_info zu registrieren.

views/devise/registrations/new_user_info.html.erb


<h2>Registrierung von Benutzerinformationen</h2>

<%= form_for @user_info do |f| %>
  <%= render "devise/shared/error_messages", resource: @user_info %>

  <div class="field">
    <%= f.label :subject, "Das Thema, das Sie Ihr Bestes geben möchten" %><br />
    <%= f.text_field :subject %>
  </div>

  <div class="field">
    <%= f.label :school, "Schulname" %><br />
    <%= f.text_field :school %>
  </div>

  <div class="field">
    <%= f.label :profile, "Füllen Sie Ihre Selbsteinführung aus" %><br />
    <%= f.text_area :profile %>
  </div>

  <div class="actions">
    <%= f.submit "Sign up" %>
  </div>
<% end %>

<%= render "devise/shared/links" %>

Lassen Sie uns die Beschreibung machen, um diese user_info auf dem Controller zu speichern.

controllers/users/registrations_controller.rb


def create_user_info
    @user = User.new(session["devise.regist_data"]["user"])
    @user_info = UserInfo.new(user_info_params)
      unless @user_info.valid?
        render :new_user_info
      end
    @user.build_user_info(@user_info.attributes)
    @user.save
    session["devise.regist_data"]["user"].clear
    sign_in(:user, @user)
  end

  protected

  def user_info_params
    params.require(:user_info).permit(:subject, :school, :profile)
  end

Nach dem Speichern des Benutzers lösche ich die Sitzung mit .clear. Und es wird geschrieben, um sich nach dem Speichern anzumelden.

Erstellen Sie abschließend eine Ansicht, die der Aktion create_user_info entspricht.

views/devise/registrations/create_user_info.html.erb


<h2>Die Registrierung wurde abgeschlossen</h2>
<%= link_to "Zurück nach oben", root_path%>

das ist alles.

Impressionen

Zum ersten Mal haben wir eine Registrierungsfunktion im Assistentenstil implementiert.

Ich wollte unbedingt die Klassenstufe mit active_hash implementieren, gab aber nach einem zweistündigen Fehler auf ...

Ich werde versuchen, es einmal zu implementieren und es erneut zu versuchen, wenn ich es mir leisten kann.

Ich arbeite jeden Tag hart, aber ich spüre nicht viel Wachstum. Sie können nichts tun, ohne den Artikel zu sehen ...

Ich werde mein Bestes geben.

Recommended Posts

Implementieren Sie Benutzerverwaltungsfunktionen in einem Assistentenformat
Führen Sie devise with Rails ein, um Benutzerverwaltungsfunktionen zu implementieren
3 Implementieren Sie einen einfachen Interpreter in Java
Implementieren Sie Benutzerverwaltungsfunktionen mit Devise
Implementieren Sie den gRPC-Client in Ruby
Implementieren Sie ein Kontaktformular in Rails
Implementieren Sie so etwas wie einen Stack in Java
So implementieren Sie eine ähnliche Funktion in Rails
So implementieren Sie eine nette Funktion in Ajax mit Rails
Implementieren Sie eine mehrspaltige IN-Klausel (Spalte: Bedingung = n: n) in DOMA.
Implementieren Sie Singleton mit Enum schnell in Java
[Vollständige Programmierung] §5 Erstellen Sie eine Überprüfungsverwaltungs-App in Ruby
Werfen wir einen Blick auf die Funktionen der Keycloak-Verwaltungskonsole (User Edition), dem Benutzerkontodienst