1. Conclusion </ b>
2. Comment coder </ b>
3. Environnement de développement </ b>
Supplément </ b>
config/roites.rb
Rails.application.routes.draw do
devise_for :users
root to:'XXXX#index'
resources :users, only: [:edit, :update] #---❶
end
❶: Je souhaite indiquer au contrôleur des utilisateurs uniquement les actions d'édition et de mise à jour, donc je ne code que pour les ressources.
app/controllers/users_controller.rb
class UsersController < ApplicationController
def edit #---❶
end
def update #---❶
if current_user.update(user_params) #---❷
redirect_to root_path #---❸
else
render :edit #---❸
end
end
private
def user_params #---❹
params.require(:user).permit(:name, :email)
end
end
❶: Je souhaite modifier le compte (nom et e-mail dans ce cas) tel que défini dans le routage, je souhaite donc recevoir la commande de la fonction de mise à jour après l'édition et la modification et indiquer le modèle, la vue, alors définissez l'action en utilisant def Faire.
❷: Je ne sais pas quel compte je souhaite mettre à jour, je le fais donc pour l'utilisateur actuellement connecté. current_user peut être utilisé en installant la gem de devise.
❸: La page d'accueil est renvoyée si la mise à jour est réussie et l'écran d'édition est renvoyé si la mise à jour échoue. Pour expliquer brièvement, il est redirigé vers car je souhaite mettre à jour les informations utilisateur après leur mise à jour (= je veux écraser la valeur de la variable d'instance d'origine). En cas d'échec, j'utilise le rendu car tout ce que j'ai à faire est de retourner à l'écran d'édition sans mettre à jour les informations incorrectes de l'utilisateur.
❹: définissez des paramètres forts pour recevoir des données tout en évitant les modifications et mises à jour involontaires des utilisateurs. J'utilise la méthode require pour obtenir des informations du modèle utilisateur. Si vous souhaitez spécifier les paramètres plus en détail, utilisez le nom de la colonne comme nom de clé.
params.require(:Nom du modèle).permit(:Nom de colonne(Devenez un nom clé),・ ・ ・ ・)
Si vous utilisez la méthode d'assistance form_with pour envoyer les informations de la personne actuellement connectée, la simple fonction d'édition de compte est terminée.
ruby:app/views/users/edit.html.erb
<%= form_with model: current_user, local: true do |f|%>
<%= f.text_field :name %>
<%= f.email_field :email %>
<%= f.submit "mise à jour"%>
<% end %>
Ruby 2.6.5
Rails 6.0.3.3
MySQL 5.6.47
SequelPro 1.1.2
VScode
params.require(:user).permit(:name, :email).merge(user_id: current_user.id)
Recommended Posts