[RAILS] Ruby: fonction d'édition de compte

【Aperçu】

1. Conclusion </ b>

2. Comment coder </ b>

3. Environnement de développement </ b>

Supplément </ b>

  1. Conclusion

Codez l'action d'édition / l'action de mise à jour dans le contrôleur, et codez la méthode d'assistance requise pour edit.html.erb </ b>!
2. Comment coder

  • Nous utilisons un bijou de devise.

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

  1. Environnement de développement

Ruby 2.6.5
Rails 6.0.3.3
MySQL 5.6.47 SequelPro 1.1.2
VScode

Supplément

  1. Vous pouvez utiliser la méthode de fusion dans ❹ pour combiner des hachages et ajouter des informations.
params.require(:user).permit(:name, :email).merge(user_id: current_user.id)

Recommended Posts