[RUBY] Mettre en œuvre des fonctions de gestion des utilisateurs dans un format d'assistant

Aperçu

Cette fois, il s'agit d'implémenter la fonctionnalité de gestion des utilisateurs dans un format d'assistant. Le format de l'assistant est un format dans lequel l'enregistrement de l'utilisateur est effectué lors de la transition des écrans.

Cette fois, les conditions d'enregistrement pour le modèle utilisateur sont nickname, grade, email, password

Puis transition d'écran vers le modèle user_info subject, school, profile

Enregistrer.

À propos, user_info est votre spécialité, votre école et votre profil.

la mise en oeuvre

Tout d'abord, installez concevoir et créez un modèle utilisateur.

L'email et le mot de passe sont inclus par défaut, alors ajoutez un pseudo et une note.

Maintenant que nous avons ajouté les colonnes, modifiez le contrôleur comme suit:

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

Ensuite, validez le modèle utilisateur (code omis)

Créez ensuite un fichier de vue.

views.devise.registrations.new.html.erb


<h2>Enregistrement des informations utilisateur</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" %>

Créez un écran de connexion.

views.home.index.html.erb


<h1>haut de page</h1>

<% if user_signed_in?%>
  <h2>Vous êtes connecté</h2>
  <%= link_to "Se déconnecter", destroy_user_session_path, method: :delete %>
<% else %>
  <h2>Pas connecté</h2>
  <%= link_to "s'inscrire", new_user_registration_path %>
  <%= link_to "S'identifier", new_user_session_path %>
<% end %>

Créez un modèle user_info après la transition d'écran.

À ce stade, n'oubliez pas d'associer user_id comme clé externe.

Après cela, le modèle utilisateur et le modèle user_info sont associés.

Ensuite, créez un contrôleur de périphérique.

rails g devise:controllers users

Vient ensuite le routage.

routes.rb


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

À ce stade, nous implémenterons l'enregistrement de user_info.

Écrivez une nouvelle méthode dans le contrôleur d'inscriptions et placez le formulaire dans le fichier de vue.

views/devise/registrations/new.html.erb


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

---réduction---

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

La description augmentera un peu d'ici. Écrivons l'action de création.

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

Apportez les données décrites sur la première page en utilisant session. Et les données sont formatées par la méthode des attributs.

Créez une instance du modèle UserInfo liée à l'instance @user générée cette fois avec build_user_info. L'instance du modèle UserInfo généré ici est affectée à la variable d'instance @user_info. Ensuite, affichez la vue de l'action new_user_info qui affiche la page sur laquelle vous souhaitez enregistrer vos informations d'adresse.

Définissons le routage de l'action new_user_info qui affiche la page pour enregistrer user_info et l'action create_user_info qui enregistre les informations d'adresse.

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

Comme écrit dans ce routage, nous allons créer un fichier de vue pour enregistrer user_info.

views/devise/registrations/new_user_info.html.erb


<h2>Enregistrement des informations utilisateur</h2>

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

  <div class="field">
    <%= f.label :subject, "Le sujet sur lequel vous voulez faire de votre mieux" %><br />
    <%= f.text_field :subject %>
  </div>

  <div class="field">
    <%= f.label :school, "nom de l'école" %><br />
    <%= f.text_field :school %>
  </div>

  <div class="field">
    <%= f.label :profile, "Remplissez votre auto-présentation" %><br />
    <%= f.text_area :profile %>
  </div>

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

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

Faisons la description pour enregistrer cette user_info dans le contrôleur.

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

Après avoir enregistré l'utilisateur, je supprime la session avec .clear. Et il est écrit pour se connecter après avoir été enregistré.

Enfin, créez une vue qui correspond à l'action create_user_info.

views/devise/registrations/create_user_info.html.erb


<h2>L'inscription est terminée</h2>
<%= link_to "Retour au sommet", root_path%>

c'est tout.

Impressions

Pour la première fois, nous avons implémenté une fonction d'enregistrement de type assistant.

Je voulais vraiment implémenter le grade avec active_hash, mais j'ai abandonné après avoir souffert d'une erreur de deux heures ...

Je vais essayer de le mettre en œuvre une fois et réessayer si je peux me le permettre.

Je travaille dur tous les jours, mais je ne sens pas beaucoup de croissance. Vous ne pouvez rien faire sans voir l'article ...

Je ferai de mon mieux.

Recommended Posts

Mettre en œuvre des fonctions de gestion des utilisateurs dans un format d'assistant
Introduire la conception avec Rails pour implémenter la fonctionnalité de gestion des utilisateurs
3 Implémentez un interpréteur simple en Java
Mettre en œuvre la fonctionnalité de gestion des utilisateurs à l'aide de Devise
Implémenter le client gRPC dans Ruby
Implémenter un formulaire de contact dans Rails
Implémenter quelque chose comme une pile en Java
Comment implémenter une fonctionnalité similaire dans Rails
Comment implémenter une fonctionnalité intéressante dans Ajax avec Rails
Implémentez une clause IN multi-colonnes (colonne: condition = n: n) dans DOMA.
Implémentez rapidement singleton avec enum en Java
[Programmation complète] §5 Créer une application de gestion des avis dans Ruby
Jetons un coup d'œil aux fonctions de la console de gestion de Keycloak (édition utilisateur), service de compte utilisateur