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.
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.
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